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 X
sendo 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?
linux
linux-kernel
history
xeor
fonte
fonte
Respostas:
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
DEAD
estado é 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.
fonte
until sleep 0.4 & perl -e '$p = shift; while (1) {open A, "</proc/$p/stat" or last; $_=<A>; print}' $! | grep X; do :; done
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!Aqui está a evidência de um que acabamos de encontrar em um sistema ativo:
fonte
ps
?