我正在通过运行来跟踪应用程序:
strace -f -y -qq -z -etrace=execve,... -o app.trace ./app
有没有办法确定哪个进程产生了哪个child_process?
我的目标是构建一个图形,该图形编码(子)进程的层次关系,以进一步分析系统调用。
编辑: 这里是一个更具体的例子: 给出以下流程层次结构:
p1
|
.---.
| |
p2 p3
|
p4
我确定使用strace可以触发p2和p4触发感兴趣的系统调用。 现在,我想找到最接近的共同祖先,在本例中为p1。
是否可以使用strace
创建包含所有信息的转储,还是必须并行使用ps
/ pstree
?
EDIT2:
我无法为问题解决pstree
。
pstree
似乎只给您快照,而且我的许多进程都非常短暂,无法通过反复调用pstree
可靠地捕获所有进程。
EDIT3: 我在跟踪中注意到以下条目:
23901 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23902, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
进程23901
用SIGCHLD
记录si_pid=23902
信号。
是否暗示进程23901
创建了子进程23902
?
答案 0 :(得分:0)
您应该跟踪对clone
的呼叫。它告诉谁产生了谁。