【问题标题】:How to continuously monitor process creation in Linux?如何在 Linux 中持续监控进程创建?
【发布时间】:2014-03-27 18:16:41
【问题描述】:

我的进程启动了一个进程——在这个例子中让它成为一个外壳,但它实际上适用于任何进程。当 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()ing 外壳。 问题: 通知父进程(即我的进程)创建新进程的标志,即PTRACE_O_TRACEFORKPTRACE_O_TRACEVFORKPTRACE_O_TRACECLONEptrace()ing 传播到子进程,我只想监控外壳。
  4. 使外壳相互配合。 问题: 在 BASH 命令回调(如在 undistract-me 中使用的)非常 hacky。我还希望避免使用特定于 shell 的代码。

我觉得我在这里遗漏了一些简单的东西。我觉得我可以使上述解决方案之一与更多 hacks一起工作,但是......我当然不必求助于像LD_PRELOADptrace()这样的大枪简单的任务,是吗?

JFYI 我正在 Vala 中编写此代码,但也欢迎使用 C sn-ps。

【问题讨论】:

标签: c linux process monitoring vala


【解决方案1】:

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

我只是根据shell将回调命令写入相关的环境变量中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多