Command line 如何从外壳外部跟踪外壳处理的启动?

Command line 如何从外壳外部跟踪外壳处理的启动?,command-line,process,exec,tty,Command Line,Process,Exec,Tty,我在C程序中使用exec(“/bin/sh”)启动一个shell。 如何跟踪“sh”流程启动的已处理流程? 例如,如果我在这个/bin/sh进程中键入“ls”,我想检索它 “ls”的pid,并在其结束时收到通知 编辑: 让我的问题更一般。您如何跟踪启动的流程 通过您自己启动的流程?如果您希望在您的孩子启动自己的孩子(您的孙子)或孙子退出时直接收到通知,您必须跟踪您的孩子。没有可移植的方法可以做到这一点 在Linux上,您可以使用ptrace()系统调用来完成此操作。基本上,您会成为附加到子进程的

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

编辑:

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

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

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

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