2011-07-06 55 views
0

我在C程序中用exec(“/ bin/sh”)启动一个shell。 我如何跟踪由“sh”过程启动的处理? 例如,如果我在这个/ bin/sh过程中键入'ls',我想检索'ls'的pid,并在结束时收到通知 。如何跟踪壳外壳的处理启动?

编辑:

使我的问题更一般化。如何通过您自己启动的流程跟踪启动的进程 ?

回答

0

如果您希望在您的孩子启动自己的孩子(您的孙子)或当这个孙子退出时直接得到通知,您必须跟踪您的孩子。没有便携的方式来做到这一点。

在Linux上,您可以使用ptrace()系统调用来执行此操作。您基本上成为附加到子进程的调试器,如gdbstrace。其他操作系统具有类似的设施。但是有一些副作用,它的使用应该只限于测试和故障排除。

您可以做的唯一便携式的事情是反复观察ps的输出并检查是否有以您的孩子为父母的过程,但是您可能会错过短暂生成的过程并在您有机会之前快速退出注意他们,这种方法也是工作密集型的。