尝试在linux上启动进程时找到通知的方法。问题是流程A启动流程B,流程B在启动流程C后死亡。我需要跟踪A,B和C的流程ID。不会为死流程维护流程历史记录。
答案 0 :(得分:1)
您不需要在流程启动时收到通知,只需要可靠地跟踪属于特定组的流程。那么,Linux有一个很好的设施 - 使用Control Groups。您可以阅读有关控制组here的更多信息。
将进程A移动到它自己的控制组中,默认情况下它的所有后续子进程及其子进程都属于该控制组,并且由于可以查询属于控制组的进程的PID列表,因此可以使用它跟踪这些过程。
以这种方式使用cgruoups还有其他好处 - 例如跟踪甚至限制此进程组使用的资源(CPU时间,IO带宽等)的能力,能够冻结和重新启动组作为整个等等。
CGroups恰好是HTCondor(分布式批处理作业管理系统)用来完成相同任务的机制,因此在这个主题上有很多可用的与HTcondor相关的材料。例如,请参阅此section in the HTCondor manual和此wiki post。
祝你好运答案 1 :(得分:0)
您可能需要process accounting,例如GNU acct。但这可能会解决您的大多数流程。
如果您可以更改,配置或调整 A , B 或 C ,请考虑使用syslog(3)。这可以像将程序 B 替换为例如一样简单。一个以logger(1)开头,然后是exec
的脚本 - 原始的 B 程序。你甚至可以尝试用你的PATH
来做这个"透明"。