如何在Linux中持续监控进程创建?

时间:2014-03-27 18:16:41

标签: c linux process monitoring vala

我的流程启动了一个流程 - 在这个例子中让它成为一个shell,但它确实适用于任何流程。我需要在shell创建新进程并获取其PID时收到通知。

我可以在任何给定时间拍摄整个过程树的快照(好吧,pstree可以),但是如何监控具有给定PID的过程创建新过程?

到目前为止,我已经在How to monitor an external process for events by its PID in C?找到了几种方法可以解决我的问题:

  1. 监控NetLink proc接口。 问题:需要我没有的root权限。
  2. 自定义库覆盖由LD_PRELOAD加载到shell进程中的系统调用。 问题:它也会被shell的子代继承,我不希望这样 - 我只想监视shell。
  3. ptrace() shell。 问题:标志通知父级(即我的流程)有关创建新流程的信息,即PTRACE_O_TRACEFORKPTRACE_O_TRACEVFORKPTRACE_O_TRACECLONE传播ptrace()子进程,我只想监视shell。
  4. 让shell合作。 问题:在BASH命令中,回调(在unistract-me中使用)非常hacky。我也更愿意避免使用特定于shell的代码。
  5. 我觉得我在这里缺少一些简单的东西。我觉得我可以让上述解决方案之一与更多黑客一起工作,但是......当然我不必诉诸LD_PRELOAD和{{1}之类的大枪对于这么简单的任务,我呢?

    JFYI我在Vala中对此进行编码,但C片段也是受欢迎的。

1 个答案:

答案 0 :(得分:3)

到目前为止还没有找到通用的解决方案,所以我不得不求助于shell合作:

我只是将回调命令写入相关的环境变量,具体取决于shell。