在 Linux 中,给定两个已知的进程pIds
,其中一个是另一个的父进程,
是否有可能知道父进程是否正在等待子进程完成?
谢谢
答案1
检查父进程的内核堆栈和/或 wchan(“等待通道”)
$ ps -o pid,stat,wchan:24,command 1978243
PID STAT WCHAN COMMAND
1978243 Ss wait bash
$ cat /proc/1978243/wchan
do_wait
$ sudo cat /proc/1978243/stack
[<ffffffff8108008d>] do_wait+0x1cd/0x260
[<ffffffff810812ab>] SyS_wait4+0x7b/0xf0
[<ffffffff815f7cf2>] entry_SYSCALL_64_fastpath+0x1a/0xa4
[<ffffffffffffffff>] 0xffffffffffffffff
这显示该进程是否位于内核系统调用内部 - 如果显示系统wait
调用,这是等待子进程的最常见方式。
请注意,许多基于事件的流程不要wait()
长时间使用该调用 –poll()
相反,它们会等待,直到收到某个事件(可能是也可能不是 SIGCHLD 事件)。
因此,这只适用于简单的线性过程。对于其他所有情况,您必须检查源代码或类似的东西。