如何找出 Linux 上执行命令/代码的原因?

如何找出 Linux 上执行命令/代码的原因?

我有一个复杂的嵌入式 Linux 软件,在 gentoo 衍生产品上运行,其中某段代码每隔大约 84 分钟定期执行一次。扫描主代码以找到可能执行该代码的位置并不成功,而且crontab似乎也没有可能的解释。

我的问题:是否可以通过修改有问题的代码来找出哪个其他进程/代码/文件/服务首先启动了它?目录中有一些/proc我可以使用的信息吗?或者不可能找出执行给定代码的进程?

答案1

如果进程寿命很长,并且您有时间去检查它,克里斯的答案会起作用,但如果它是一个短时间运行的命令,则在进程仍然存在时可能很难捕获它。

解决此问题的另一种方法是在程序周围放置一个“包装器”。

假设被调用的程序是/usr/bin/someprog.

  • 搬去。/usr/bin/someprog/usr/bin/someprog.orig
  • 创建/usr/bin/someprog为脚本,例如:

 

#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
  • 进而chmod a+x /usr/bin/someprog

这将转储进程树并将其放入/tmp/someprog.log.然后你可以查看这棵树并找出是什么在生成它。

答案2

听起来您正在寻找父 PID (PPID):

$ ps -o ppid -p 5743
 PPID
  219

因为您还提到您有/proc

$ awk '{ print $4 }' /proc/5743/stat
219

相关内容