Es gibt 5 Prozesse, die nicht beendet werden können, kill -9 $PID
und die Ausführung cat /proc/$PID/cmdline
hängt die aktuelle Sitzung. Vielleicht sind es Zombie-Prozesse.
Durch Ausführen ps -ef or htop
wird auch die aktuelle Sitzung angehalten . Aber top
und ps -e
funktionieren gut.
Es scheint also zwei Probleme zu geben, auf die das Dateisystem nicht reagiert.
Dies ist eine Produktionsmaschine, auf der virtuelle Maschinen ausgeführt werden. Ein Neustart ist daher nicht möglich.
Die folgenden Prozess-IDs funktionieren nicht: 16181 16765 5985 7427 7547
Das übergeordnete Element dieser Prozesse ist init
├─collectd(16765)─┬─{collectd}(16776)
│ ├─{collectd}(16777)
│ ├─{collectd}(16778)
│ ├─{collectd}(16779)
│ ├─{collectd}(16780)
│ └─{collectd}(16781)
├─collectd(28642)───{collectd}(28650)
├─collectd(29868)─┬─{collectd}(29873)
│ ├─{collectd}(29874)
│ ├─{collectd}(29875)
│ └─{collectd}(29876)
Und einer der Qemu-Prozesse funktioniert nicht
|-qemu-system-x86(16181)-+-{qemu-system-x86}(16232)
| |-{qemu-system-x86}(16238)
| |-{qemu-system-x86}(16803)
| |-{qemu-system-x86}(17990)
| |-{qemu-system-x86}(17991)
| |-{qemu-system-x86}(17992)
| |-{qemu-system-x86}(18062)
| |-{qemu-system-x86}(18066)
| |-{qemu-system-x86}(18072)
| |-{qemu-system-x86}(18073)
| |-{qemu-system-x86}(18074)
| |-{qemu-system-x86}(18078)
| |-{qemu-system-x86}(18079)
| |-{qemu-system-x86}(18086)
| |-{qemu-system-x86}(18088)
| |-{qemu-system-x86}(18092)
| |-{qemu-system-x86}(18107)
| |-{qemu-system-x86}(18108)
| |-{qemu-system-x86}(18111)
| |-{qemu-system-x86}(18113)
| |-{qemu-system-x86}(18114)
| |-{qemu-system-x86}(18119)
| |-{qemu-system-x86}(23147)
| `-{qemu-system-x86}(27051)
linux
process
kill
zombie-process
Sam Stoelinga
quelle
quelle
/usr/bin/strace ps -ef
zu sehen, wo genau Ihreps -ef
hängt.ps -el
und in welchem Zustand befinden sich diese Prozesse?Antworten:
Du hast keine Zombies.
cat /proc/$PID/cmdline
hätte kein Problem mit einem Zombie. Wennkill -9
das Programm nicht beendet wird , bedeutet dies, dass das Programm einen unterbrechungsfreien E / A-Vorgang ausführt. Das weist normalerweise auf eines von drei Dingen hin:Dienstprogramme wie
ps
können hängen bleiben, wenn sie versuchen, Informationen wie den ausführbaren Pfad des Prozesses zu lesen, den der Kernel aus einem der oben genannten Gründe nicht bereitstellt.Versuchen Sie
cat /proc/16181/syscall
zu sehen, was der Prozess 16181 tut. Dies kann funktionieren oder auch nicht, je nachdem, wie weit Ihr System entfernt ist.Wenn es sich bei dem Problem um ein Netzwerkdateisystem handelt, können Sie es möglicherweise zwangsweise aushängen oder online schalten. Wenn das Problem ein Kernel- oder Hardwarefehler ist, hängt das, was Sie tun können, von der Art des Fehlers ab. Ein Neustart (und ein Upgrade auf einen festen Kernel oder das Ersetzen der defekten Hardware) wird dringend empfohlen.
quelle
Die anderen Antworten gehen davon aus, dass es sich um Zombie-Prozesse handelt. Ein Zombie-Prozess ist ein Prozess, der ausgeführt wurde, sich jedoch noch in der Prozesstabelle befindet, falls der Elternteil den Exit-Status wissen möchte. Diese sind normal und
init
bereinigen automatisch Zombie-Prozesse, die ihr zugewiesen werden.Zombie-Prozesse sollten niemals dazu führen, dass etwas hängen bleibt. Es scheint also, dass dies nicht Ihr Problem ist. Wenn ein Systemaufruf oder ein Treiber hängen bleibt, befindet sich der Prozess möglicherweise in einem unterbrechungsfreien Zustand. Es gibt eine gute Erklärung hier .
quelle
fork
Erfolg verhindern (wenn schwernrpoc
erreicht wird), da sie immer noch Platz in der Prozesstabelle belegen.So finden Sie Zombie-Prozesse unter Linux:
Zunächst können Sie versuchen, mit dem Befehl kill das SIGCHLD-Signal an den übergeordneten Prozess des Zombies zu senden. Beachten Sie, dass der obige Befehl die PPID (PID des übergeordneten Prozesses) jedes Zombies angibt. In unserem Beispiel ist die PPID des Zombies
555
.Wenn ein Zombie-Prozess immer noch nicht verschwindet, können Sie den übergeordneten Prozess (z. B. 555) des Zombies beenden.
Sobald der übergeordnete Prozess beendet ist, wird der Zombie vom Init-Prozess übernommen, der allen Prozessen unter Linux übergeordnet ist. Der Init-Prozess ruft regelmäßig
wait()
auf, um einen Zombie-Prozess zu ernten.quelle
Sie können einen Zombie nur töten, indem Sie seine Eltern töten. Ein Zombie-Prozess hat alle seine Ressourcen freigegeben und wartet darauf, dass sein Exit-Status von seinem Elternteil übernommen wird. Es wird zu einem Zombie, wenn der Elternteil a nicht ausführt
wait
, um den Exit-Status seines Kindes zu ermitteln. Wenn du die Eltern des Zombies tötest,init
erhältst du den Exit-Status und der Zombie stirbt schließlich.quelle
init
. Wenn ein Zombie repariert wirdinit
, kannst du ihn nicht töten.