我有一个复杂的嵌入式 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