Possível ver processos mortos?


13

Em man ps, afirma claramente os diferentes estados que um processo pode ter no Linux.

D    Uninterruptible sleep (usually IO)
R    Running or runnable (on run queue)
S    Interruptible sleep (waiting for an event to complete)
T    Stopped, either by a job control signal or because it is being traced.
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    Defunct ("zombie") process, terminated but not reaped by its parent.

Mesmo Xsendo um estado de processo, nunca deve ser visto. Mas isso está correto? Existe uma maneira teórica de ver isso como um estado em um processo? Ou é completamente 100% impossível?


2
O uso de should e o fato de ele estar na página de manual implica que é realmente possível vê-lo. Não tenho idéia de como ou quando.
terdon

Respostas:


7

Mergulhei um pouco no kernel do Linux, sem o conhecimento de como ele funciona em seu núcleo interno ou qualquer grande conhecimento em C. Então, por favor, seja legal com essa teoria :)

O DEADestado é definido https://github.com/torvalds/linux/blob/master/fs/proc/array.c#L141 e é usado em https://github.com/torvalds/linux/blob/master/fs /exec.c#L974 para fornecer apenas um status de retorno. Portanto, a única maneira de ver isso é se você verificar o estado do processo antes em https://github.com/torvalds/linux/blob/master/fs/exec.c#L986 (ou mais tarde, sempre que essa função for chamada a partir de..).

Se você tentar eliminar um processo morto, ele será tratado e ignorado em https://github.com/torvalds/linux/blob/master/kernel/signal.c#L1363

Então, em teoria ... acho que a resposta é sim. X como um estado pode ser visto na teoria, mas provavelmente nunca esteve na vida real.

Por favor, corrija-me se / onde estiver errado .. Não tenho certeza disso.


2
Eu posso ver comuntil sleep 0.4 & perl -e '$p = shift; while (1) {open A, "</proc/$p/stat" or last; $_=<A>; print}' $! | grep X; do :; done
Stéphane Chazelas

Aqui está a aparência do processo (saída de /proc/.../stat); 4603 (sleep) X 0 -1 -1 0 -1 4202508 0 0 0 0 0 0 0 0 20 0 0 0 175042279 0 0 0 0 0 0 0 0 0 0 0 0 18446744071579306375 0 0 17 0 0 0 0 0 0.. Pergunta respondida. O X é possível! Obrigado!
xeor

1

Aqui está a evidência de um que acabamos de encontrar em um sistema ativo:

$ sudo ps axf -O wchan
31103 -      R ?        00:00:00 /bin/bash /usr/local/bin/monitorcron taskA
31104 exit   X ?        00:00:00  \_ [su]

Você se lembra se o processo foi encerrado na próxima vez que você foi executado ps?
Hitechcomputergeek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.