【发布时间】:2011-07-06 13:25:23
【问题描述】:
我在 C 程序中使用 exec("/bin/sh") 启动一个 shell。 如何跟踪“sh”进程启动的处理? 例如,如果我在这个 /bin/sh 进程中键入“ls”,我想检索 'ls' 的 pid 并在结束时收到通知。
编辑:
为了让我的问题更笼统。您如何跟踪启动的流程 通过您自己启动的流程?
【问题讨论】:
标签: command-line process exec tty
我在 C 程序中使用 exec("/bin/sh") 启动一个 shell。 如何跟踪“sh”进程启动的处理? 例如,如果我在这个 /bin/sh 进程中键入“ls”,我想检索 'ls' 的 pid 并在结束时收到通知。
编辑:
为了让我的问题更笼统。您如何跟踪启动的流程 通过您自己启动的流程?
【问题讨论】:
标签: command-line process exec tty
如果您想在您的孩子启动自己的孩子(您的孙子)或该孙子退出时直接收到通知,您必须跟踪您的孩子。没有便携的方法可以做到这一点。
在 Linux 上,您可以使用 ptrace() 系统调用来执行此操作。您基本上成为了附加到子进程的调试器,例如gdb 或strace。其他操作系统也有类似的功能。但有一些副作用,最好将其用于测试和故障排除。
您可以做的唯一可移植的事情是反复查看ps 的输出并检查以您的孩子为父的进程,但您可能会错过生成并在您拥有之前快速退出的短期进程有机会注意到它们,而且这种方法也是工作密集型的。
【讨论】: