Como saber se um processo pai está esperando por um processo filho no Linux

0

No Linux dados dois processos com pIds , e um sendo o pai do outro,

é possível saber se o pai está esperando o processo filho terminar?

Obrigado

    
por idelvall 15.11.2016 / 10:55

1 resposta

4

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.

    
por 15.11.2016 / 11:46