gpt4 book ai didi

c - 如何持续监控 Linux 中的进程创建?

转载 作者:太空狗 更新时间:2023-10-29 11:09:11 26 4
gpt4 key购买 nike

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

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

到目前为止,我在 How to monitor an external process for events by its PID in C? 找到了几种方法这些都没有真正解决我的问题:

  1. 监控 NetLink proc 接口(interface)。 问题:需要我没有的 root 权限。
  2. 自定义库覆盖由 LD_PRELOAD 加载到 shell 进程中的系统调用。 问题:它也会被 shell 的子级继承,我不希望这样 - 我只想监视 shell。
  3. ptrace()shell。 问题: 通知父进程(即我的进程)有关创建新进程的标志,即 PTRACE_O_TRACEFORKPTRACE_O_TRACEVFORKPTRACE_O_TRACECLONEptrace() 传播到子进程,我只想监视 shell。
  4. 让外壳合作。 问题:在 BASH 命令回调中(如在 undistract-me 中使用的)非常 hacky。我还希望避免特定于 shell 的代码。

我觉得我在这里缺少一些简单的东西。我觉得我可以使上述解决方案之一与 more hacks 一起工作,但是......当然我不必诉诸像 LD_PRELOADptrace() 这样一个简单的任务,对吗?

仅供引用,我正在用 Vala 编写代码,但也欢迎使用 C 代码片段。

最佳答案

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

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

关于c - 如何持续监控 Linux 中的进程创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com