我的流程启动了一个流程 - 在这个例子中让它成为一个shell,但它确实适用于任何流程。我需要在shell创建新进程并获取其PID时收到通知。
我可以在任何给定时间拍摄整个过程树的快照(好吧,pstree
可以),但是如何监控具有给定PID的过程创建新过程?
到目前为止,我已经在How to monitor an external process for events by its PID in C?找到了几种方法可以解决我的问题:
LD_PRELOAD
加载到shell进程中的系统调用。 问题:它也会被shell的子代继承,我不希望这样 - 我只想监视shell。ptrace()
shell。 问题:标志通知父级(即我的流程)有关创建新流程的信息,即PTRACE_O_TRACEFORK
,PTRACE_O_TRACEVFORK
和PTRACE_O_TRACECLONE
传播ptrace()
子进程,我只想监视shell。我觉得我在这里缺少一些简单的东西。我觉得我可以让上述解决方案之一与更多黑客一起工作,但是......当然我不必诉诸LD_PRELOAD
和{{1}之类的大枪对于这么简单的任务,我呢?
JFYI我在Vala中对此进行编码,但C片段也是受欢迎的。
答案 0 :(得分:3)
到目前为止还没有找到通用的解决方案,所以我不得不求助于shell合作:
我只是将回调命令写入相关的环境变量,具体取决于shell。