在 Linux 中如何知道父进程是否正在等待子进程

在 Linux 中如何知道父进程是否正在等待子进程

在 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 事件)。

因此,这只适用于简单的线性过程。对于其他所有情况,您必须检查源代码或类似的东西。

相关内容