Überprüfen Sie den Kernel Stack und / oder Wchan ("Wait Channel") der Eltern.
$ 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
Dies zeigt an, ob sich der Prozess in einem Kernel-Syscall befindet. Wenn er den wait
Syscall anzeigt, ist dies die häufigste Art, auf einen untergeordneten Prozess zu warten.
Beachten Sie, dass viele ereignisbasierte Prozesse den Aufruf lange Zeit nicht verwenden. wait()
Stattdessen warten sie poll()
stattdessen auf, bis ein Ereignis empfangen wird (das möglicherweise ein SIGCHLD-Ereignis ist oder nicht).
Dies funktioniert daher nur mit einfachen linearen Prozessen. Für alles andere müssten Sie den Quellcode oder so überprüfen.