Ein Prozess im beendeten Zustand ist ein anderer Name dafür. Es wird mit seinem übergeordneten Prozess aus dem Speicher gereinigt. Wenn der übergeordnete Prozess nicht über die Änderung informiert wird, wird der untergeordnete Prozess zum Zombie -Prozess und erhält kein Abschlusssignal, sodass er den Speicher verlassen kann. In Linux wird sein übergeordneter Prozess über die Entfernung informiert, wenn ein Prozess aus dem Speicher entfernt wird. Dieser Vorgang bleibt im Speicher, bis er seinen übergeordneten Prozess benachrichtigt.
Dies bedeutet, dass der tote Vorgang nicht sofort aus dem Speicher entfernt wird und im Systemspeicher fortgesetzt wird, wodurch ein Zombie -Prozess wird. Um einen Zombie -Prozess zu entfernen, ruft der übergeordnete Prozess die Wait () -Funktion auf. Sobald die Wait () -Funktion in das Spiel gerufen wird, wird der Zombie -Prozess vollständig aus dem System entfernt.
Einen Zombie -Prozess töten
Bevor wir uns bewegt, um den Zombie -Prozess zu töten. Außerdem werden wir mehr über den Zombie -Prozess erfahren, um den Tötungsprozess leicht zu verstehen.
Was ist die Ursache des Zombie -Prozesses?
Es kann zwei Hauptursachen des Zombie -Prozesses geben. Der erste ist derjenige, bei dem der übergeordnete Prozess die Funktion Wait () nicht aufrufen kann, wenn der Kindererstellungsprozess ausgeführt wird, was dazu führt, dass die Sighld ignoriert wird. Dies kann den Zombie -Prozess verursachen. Die zweite ist diejenige, bei der die andere Anwendung die Ausführung der übergeordneten Prozessausführung aufgrund schlechter Codierung oder böswilliger Inhalte beeinflussen kann.
Mit anderen Worten können wir sagen, dass der Zombie -Prozess verursacht wird, wenn der übergeordnete Prozess die Änderungen des Kinderprozesses ignoriert oder den Status des Kinderprozesses nicht überprüfen kann, wenn der Kinderprozess beendet wird, wird die PCB nicht gelöscht.
Steckt der Zombie -Prozess ein Risiko?
Der Zombie -Prozess stellt kein Risiko dar, sie verwenden nur einen Teil des Speichers im System. Die Prozesstabelle ist von geringer Größe, aber die ID der Tabelle, in der der Zombie -Prozess gespeichert wird. Für den Fall, dass es viele Zombie -Prozesse gibt, die den Speicherort reservieren, und keinen Speicherplatz, der für andere Prozesse stattfinden kann, wird es für andere Prozesse schwierig zu laufen.
Einen Zombie -Prozess finden
Bevor Sie den Zombie -Prozess töten, ist es notwendig, sie zu finden. Um den Zombie -Prozess zu finden, führen wir den folgenden Befehl im Terminal aus:
linux@linux-virtualBox: ~ $ PS Aux | eGrep "z | nicht mehr mehr als
Im obigen Befehl steht „PS“ für den Prozessstatus, um den Status des Prozesss zu sehen, der im System zusammen mit dem PS -Befehl ausgeführt wird. Wir haben den Flag -Aux übergeben, in dem „A“ die Details aller zugeordneten Prozesse im Terminal angibt. „U“ gibt die Prozesse an, die sich in der Benutzerliste befinden, und das „X“ gibt die Prozesse an, die nicht aus dem Terminal ausgeführt werden. In Kombination können wir sagen, dass es verwendet wird, um alle laufenden Prozesse zu drucken, die im Speicher gespeichert sind.
Die zweite Option "EGREP" ist ein Verarbeitungswerkzeug, mit dem die Ausdrücke oder Muster an einem bestimmten Ort abgerufen werden können. Zuletzt haben wir das Schlüsselwort „Z | Defunct“ übergeben, das den Zombie -Prozess bezeichnet, der im Speicher abgerufen werden soll. Wenn wir den Befehl ausführen, erhalten wir die folgende Ausgabe, die den Zombie -Prozess im System zusammen mit seiner „PID“ zeigt,.
Ausgang:
Benutzer PID %CPU %mem vsz RSS TTY STAT STAT START TIME -Befehl
Linux 33819 0.0 0.0 18008 724 Punkte/0 S+ 20:22 0:00 Grep -e - -Color = Auto Z | Deaktiviert
Zombie -Prozesse sind bereits tote Prozesse, aber der übergeordnete Prozess kann seinen Status nicht lesen und kann nicht aus dem Speicher freigesetzt werden. Der tote Prozess kann also nicht getötet werden. Wir können nur für sie tun, damit der übergeordnete Prozess den untergeordneten Zustand lesen kann, damit er ausgeführt und aus der Prozess Tabelle entfernt werden kann. Dafür werden wir den unten genannten Befehl ausführen.
linux@linux -virtualBox: ~ $ ps -o ppid = -p 33819
Im obigen Befehl haben wir versucht, die übergeordnete ID des Zombie -Prozesses zu erhalten. Nachdem wir die übergeordnete ID erhalten haben, werden wir den folgenden Befehl ausführen, um den Zombie -Prozess zu töten, indem wir die Sigchld an den übergeordneten Prozess senden, mit dem der übergeordnete Prozess den Kinderzustand lesen kann:
linux@linux -virtualBox: ~ $ Kill -s sigchld parent_pid
Im obigen Befehl übergeben wir das Signal an die übergeordnete ID, um den Zombie -Prozess der übergegebenen übergegebenen ID zu töten. Nachdem der obige Befehl ausgeführt wurde. Um nach dem Prozess zu überprüfen, ob der Zombie -Prozess getötet wird oder nicht, können Sie den Befehl ausführen, den wir bereits ausgeführt haben, um den Zombie -Prozess zu finden.
Versuchen wir einen anderen Weg, um den Zombie -Prozess zu töten, der durchgeführt wird, indem der übergeordnete Prozess selbst getötet wird. Dies ist die effizientere Möglichkeit, den Zombie -Prozess abzutöten, da er den gesamten Prozess vollständig beseitigt und dem Zombie nicht wieder auftritt. Dafür werden wir den Befehl unter der verderbten Ausführung ausführen:
linux@linux -virtualBox: ~ $ Kill -9 Eltern_PID
Nachdem wir den obigen Befehl ausgeführt haben, erlauben wir dem System, den übergeordneten Prozess abzutöten.
Abschluss
Wir haben kurz den Zombie -Prozess und auch die Ursachen und das Verfahren zum Töten dieser Prozesse besprochen. Bevor wir zu unserem Tötungsprozess gehen, haben wir versucht, die Gründe für ihre Ursache und auch die Möglichkeiten zu erklären, sie mit einfachen Befehlen zu identifizieren.