Possible de voir des processus morts?


13

Dans man ps, il indique clairement les différents états qu'un processus peut avoir sous 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.

Même si Xc'est un état de processus, il ne devrait jamais être vu. Mais est-ce exact? Existe-t-il une manière théorique de voir cela comme un état d'un processus? Ou est-ce complètement impossible à 100%?


2
L'utilisation de should et le fait qu'il se trouve dans la page de manuel impliquent qu'il est réellement possible de le voir. Je ne sais pas comment ni quand.
— terdon

Réponses:


7

J'ai plongé un peu dans le noyau Linux, sans savoir comment il fonctionne dans son noyau interne, ni aucune grande connaissance en C. Alors soyez gentil avec cette théorie :)

L' DEADétat est défini https://github.com/torvalds/linux/blob/master/fs/proc/array.c#L141 et est utilisé à https://github.com/torvalds/linux/blob/master/fs /exec.c#L974 pour donner un statut de retour uniquement. Donc, la seule façon de le voir est de vérifier l'état du processus avant autour de https://github.com/torvalds/linux/blob/master/fs/exec.c#L986 (ou plus tard partout où cette fonction est appelée de..).

Si vous essayez de tuer un processus mort, il sera pris en charge et ignoré à https://github.com/torvalds/linux/blob/master/kernel/signal.c#L1363

Donc en théorie ... je pense que la réponse est oui. X comme un état peut être vu en théorie, mais n'a probablement jamais été dans la vraie vie.

Veuillez me corriger si / où je me trompe .. Je n'en suis pas sûr du tout ..


2
Je peux le voir avecuntil 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

Voici à quoi ressemble le processus (sortie 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.. Réponse à la question. Le X est possible! Merci!
— xeor

1

Voici la preuve de celui que nous venons de rencontrer sur un système en direct:

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

Vous souvenez-vous si le processus a été arrêté la prochaine fois que vous avez couru ps?
— Hitechcomputergeek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.