En man ps
, establece claramente los diferentes estados que un proceso puede tener en 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.
Aunque X
es un estado de proceso, nunca debe verse. Pero eso es correcto? ¿Hay una manera teórica de ver eso como un estado en un proceso? ¿O es completamente 100% imposible?
linux
linux-kernel
history
xeor
fuente
fuente
Respuestas:
Me sumergí un poco en el kernel de Linux, sin saber cómo funciona en su núcleo interno, o ningún gran conocimiento de C. Así que por favor sé amable con esta teoría :)
El
DEAD
estado se define https://github.com/torvalds/linux/blob/master/fs/proc/array.c#L141 y se usa en https://github.com/torvalds/linux/blob/master/fs /exec.c#L974 para dar solo un estado de devolución. Entonces, la única forma en que se puede ver es si verifica el estado del proceso antes de https://github.com/torvalds/linux/blob/master/fs/exec.c#L986 (o más adelante donde sea que se llame esta función) desde..).Si intenta matar un proceso muerto, se resolverá e ignorará en https://github.com/torvalds/linux/blob/master/kernel/signal.c#L1363
Entonces, en teoría ... creo que la respuesta es sí. X como estado puede verse en teoría, pero probablemente nunca haya estado en la vida real.
Por favor, corríjame si estoy equivocado. No estoy seguro de esto.
fuente
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
.. Pregunta respondida. ¡La X es posible! ¡Gracias!Aquí hay evidencia de una que acabamos de encontrar en un sistema en vivo:
fuente
ps
?