2014-01-21 28 views
1

试图在linux上启动进程时寻求通知的方式。问题在于,流程A启动流程B,流程B在启动流程C后死亡。我需要跟踪A,B和C的流程ID。流程历史记录不针对死进程维护。Linux在进程启动时通知

+0

偶尔使用strace(1)可能就足够了。 –

+0

解释什么是* A *,* B *和* C *。你有他们的源代码吗?他们是免费软件吗?你可以配置它们吗(例如用一个包装shell脚本替换它们中的一些)? –

回答

0

您可能想要process accounting,例如GNU acct。但是这可能会处理大部分流程。

如果你可以改变,配置或修改您的一个,或Ç考虑使用syslog(3)。这可以如同用例如程序B来代替那样简单。一个以logger(1)开头的脚本,然后exec-原始的B程序。你甚至可以尝试用你的PATH来玩弄“透明”的做法。

1

当进程启动时,您不需要获取通知,只需要可靠地跟踪属于特定组的进程。那么,Linux有一个伟大的设施 - 使用Control Groups。你可以阅读更多关于控制组here

将进程A移动到其自己的控制组中,其所有后续子进程及其子进程将默认属于该控制组,因为可以查询可以使用属于控制组的进程的PID列表它来跟踪这些过程。

以这种方式使用cgruoups还有其他好处 - 例如跟踪甚至限制此进程组使用的资源(CPU时间,IO带宽等),冻结和重新启动组的能力整体和更多。

CGroups正好是分布式批处理作业管理系统HTCondor用于完成相同任务的机制,因此在这个主题上有很多与HTcondor相关的材料。例如见section in the HTCondor manualwiki post

祝你好运