Verifique a pilha do kernel pai e / ou o wchan ("canal de espera")
$ 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
Isso mostra se o processo está dentro de um syscall do kernel - se ele mostra o wait
syscall, essa é a maneira mais comum de esperar por um processo filho.
Observe que muitos processos baseados em eventos não usam a chamada wait()
por um longo tempo - em vez disso, esperam em poll()
, até que algum evento seja recebido (o que pode ou não ser um evento SIGCHLD).
Portanto, isso só funciona com processos lineares simples. Para todo o resto, você teria que verificar o código fonte ou algo semelhante.