Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Was verursacht Zombies unter Linux?
Der Grund, warum Linux einen Zombie (Zombie-Prozess) generiert, ist: Nachdem der übergeordnete Prozess einen untergeordneten Prozess generiert hat, wird der untergeordnete Prozess vor dem übergeordneten Prozess beendet, aber der übergeordnete Prozess verarbeitet das vom untergeordneten Prozess gesendete Exit-Signal nicht Der untergeordnete Prozess wird als Zombie-Prozess bezeichnet. Zu diesem Zeitpunkt kann der Prozess nicht mithilfe der Root-Identität beendet werden. Dies kann durch das Beenden des übergeordneten Prozesses des untergeordneten Prozesses gelöst werden.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.
Ursache:
Zombie-Prozess, der englische Name ist Zombie-Prozess, wie der Name schon sagt, ist es ein toter Prozess. Was genau ist der Zombie-Prozess? Der Grund, warum der Zombie-Prozess generiert wird, besteht darin, dass der untergeordnete Prozess vor dem übergeordneten Prozess beendet wird. Der übergeordnete Prozess verarbeitet ihn jedoch nicht Vom untergeordneten Prozess gesendetes Exit-Signal. Dann wird dieser untergeordnete Prozess zu einem Zombie-Prozess.
Dies ist der sogenannte Zombie (Zombie-Prozess). Dies bedeutet, dass während des fork()/execve()-Prozesses davon ausgegangen wird, dass der übergeordnete Prozess noch existiert, wenn der untergeordnete Prozess endet, und der übergeordnete Prozess nicht installiert wurde Die SIGCHLD-Signalverarbeitungsfunktion ruft waitpid vor fork() auf. Wenn Sie auf das Ende des untergeordneten Prozesses warten und das Signal nicht explizit ignorieren, wird der untergeordnete Prozess zu einem Zombie-Prozess und kann zu diesem Zeitpunkt nicht normal beendet werden -9 kann den Zombie-Prozess nicht beenden. Die Lösung besteht darin, den übergeordneten Prozess des Zombie-Prozesses zu beenden (der übergeordnete Prozess des Zombie-Prozesses muss vorhanden sein) und wird von Prozess Nr. 1 übernommen, für den Init immer verantwortlich ist Aufräumen des Zombie-Prozesses.
Zombie-Prozess bedeutet, dass der übergeordnete Prozess beendet wurde und wenn kein Prozess den Prozess nach dem Tod akzeptiert, wird er zu einem Zombie-Prozess (Zombie-Prozess)
Lösung:(1) Der übergeordnete Prozess verwendet Funktionen wie wait und waitpid Warten, bis der untergeordnete Prozess beendet ist, was dazu führt, dass der übergeordnete Prozess hängen bleibt.
Führen Sie den Systemaufruf wait() oder waitpid() aus. Der untergeordnete Prozess gibt seine Daten in der Prozesstabelle nach der Beendigung sofort an den übergeordneten Prozess zurück und das System löscht den Einstiegspunkt sofort. In diesem Fall wird der nicht mehr existierende Prozess nicht generiert.
(2) Wenn der übergeordnete Prozess sehr ausgelastet ist, können Sie die Signalfunktion verwenden, um einen Handler für SIGCHLD zu installieren. Nachdem der untergeordnete Prozess beendet ist, empfängt der übergeordnete Prozess das Signal und kann im Handler „wait“ aufrufen, um es wiederzuverwenden.
(3) Wenn es dem übergeordneten Prozess egal ist, wann der Schlüsselinhalt des untergeordneten Prozesses endet, kann er das Signal (SIGCLD, SIG_IGN) oder das Signal (SIGCHLD, SIG_IGN) verwenden, um den Kernel darüber zu informieren, dass er kein Interesse daran hat Ende des untergeordneten Prozesses, dann endet der untergeordnete Prozess. Danach wird der Kernel recycelt und sendet keine Signale mehr an den übergeordneten Prozess
(4) Zweimal verzweigen, der übergeordnete Prozess gabelt einen untergeordneten Prozess und arbeitet dann weiter Der Prozess verzweigt einen Enkelprozess und wird dann beendet. Anschließend wird der Enkelprozess von Init übernommen. Nachdem der Enkelprozess beendet ist, wird er von Init recycelt. Allerdings müssen Sie das Recycling des untergeordneten Prozesses selbst durchführen.
Empfohlenes Lernen:
Linux-Video-TutorialDas obige ist der detaillierte Inhalt vonWas verursacht Zombies unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!