In man ps
gibt es deutlich die verschiedenen Zustände an, die ein Prozess unter Linux haben kann.
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.
Auch wenn X
es sich um einen Prozesszustand handelt, sollte er niemals gesehen werden. Aber ist das richtig? Gibt es eine theoretische Möglichkeit, dies als Zustand eines Prozesses zu betrachten? Oder ist es zu 100% unmöglich?
linux
linux-kernel
history
xeor
quelle
quelle
Antworten:
Ich habe mich ein wenig mit dem Linux-Kernel befasst, ohne zu wissen, wie er in seinem inneren Kern funktioniert, oder ohne große C-Kenntnisse. Also sei bitte nett mit dieser Theorie :)
Der
DEAD
Status ist unter https://github.com/torvalds/linux/blob/master/fs/proc/array.c#L141 definiert und wird unter https://github.com/torvalds/linux/blob/master/fs verwendet /exec.c#L974 , um nur einen Rückgabestatus anzugeben . Die einzige Möglichkeit, die jemals gesehen werden kann, besteht darin, den Prozessstatus zu überprüfen, bevor https://github.com/torvalds/linux/blob/master/fs/exec.c#L986 (oder später, wo immer diese Funktion aufgerufen wird) von..).Wenn Sie versuchen, einen toten Prozess zu beenden, wird dieser unter https://github.com/torvalds/linux/blob/master/kernel/signal.c#L1363 behoben und ignoriert
Also in der Theorie ... ich denke die Antwort ist ja. X als Zustand kann in der Theorie gesehen werden, war aber wahrscheinlich noch nie im wirklichen Leben.
Bitte korrigieren Sie mich, wenn / wo ich falsch liege. Ich bin mir da überhaupt nicht sicher.
quelle
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
.. Frage beantwortet. Das X ist möglich! Vielen Dank!Hier ist ein Beweis für einen, dem wir gerade auf einem Live-System begegnet sind:
quelle
ps
?