0

我在 C 程序中使用 exec("/bin/sh") 启动了一个 shell。如何跟踪“sh”进程启动的进程?例如,如果我在此 /bin/sh 进程中键入“ls”,我想检索“ls”的 pid,并在结束时收到通知。

编辑:

使我的问题更笼统。您如何跟踪由您自己启动的进程启动的进程?

4

1 回答 1

0

如果您想在您的孩子启动自己的孩子(您的孙子)或该孙子退出时直接通知您,您必须跟踪您的孩子。没有便携的方法可以做到这一点。

在 Linux 上,您可以使用ptrace()系统调用来执行此操作。您基本上成为附加到子进程的调试器,例如gdbor strace。其他操作系统也有类似的功能。但是有一些副作用,它的使用最好仅限于测试和故障排除。

您可以做的唯一可移植的事情是反复观察输出ps并检查以您的孩子为父母的进程,但您可能会错过产生的短期进程并在您有机会注意到它们之前迅速退出,并且这种方法也是工作密集型的。

于 2012-01-05T16:58:51.093 回答