Um Frage Nummer 1 zu beantworten:
Wenn ein Prozess untergeordnete Prozesse hervorbringt, haben die untergeordneten Prozesse jeweils ihre eigene PID. Die PPID jedes Kindes (Prozess-ID des Elternteils) ist die PID ihres Elternprozesses. Wenn der Elternprozess stirbt, sind die Kindprozesse verwaist. Verwaiste Prozesse werden automatisch vom System-Init-Prozess aufgenommen, der eine PID von 1 hat.
Problem
Ihr Skript erstellt wahrscheinlich Zombies wegen deinem kill -9
Befehle; Wie auch von jjlin answer vorgeschlagen, ist es niemals eine gute Praxis, einen Prozess abrupt zu beenden, ohne dazu gezwungen zu werden.
Ab man bash
wir können lesen:
Prozesse, die mit
Antwort 1: Der Prozess init hat die PID 1 und dafür weist Linux ihnen den Elternteil mit PID 1 zu (weil es sie init zuweist ).
Antwort Nr. 2: Sie können nicht einfach getötet werden weil sie einfach tot sind ... wenn ihr Elternteil init
ist Wahrscheinlich reicht es, einige Zeit zu warten.
Um Zombies aus einem System zu entfernen, kann das SIGCHLD-Signal manuell mit dem Kill-Befehl an das übergeordnete System gesendet werden. Wenn sich der Elternprozess immer noch weigert, den Zombie zu ernten, wäre der nächste Schritt, den Elternprozess zu entfernen. Wenn ein Prozess seinen Elternprozess verliert, wird init zu seinem neuen Elternprozess. Init führt regelmäßig den Wait-Systemaufruf aus, um alle Zombies mit init als Eltern zu ernten. [1]
Falls diese Idee eines Tages auftaucht:bis #kill -9 init
Prozess mit Root-Rechten ist das Software-Äquivalent zum physischen Trennen des Computers vom Stromnetz. [:-)]
Allerdings Zombie-Prozesse kann in der Ausgabe von ps
identifiziert werden Befehl durch das Vorhandensein eines "Z" in der STAT Säule. Sie können die folgende Zeile verwenden, um sie leicht zu identifizieren
ps -aux | grep Z
Einige Referenzen zur Linux-Zombies-Welt :
- Gibt es eine Möglichkeit, einen Zombie-Prozess ohne Neustart zu beenden?
- Was sind Zombie-Prozesse
- Wie man den Zombie-Prozess beendet
- [1] Aus vielen Quellen im Netz