Was ist ein Zombie-Prozess?

Ein Zombie-Prozess ist eine Instanz eines Computerprogramms, das trotz Beendigung der Ausführung einen Prozesstabellendatensatz beibehält. Defekte Prozesse wie diese werden in der Regel mit Unix® und anderen ähnlichen Betriebssystemen in Verbindung gebracht, da sie untergeordnete Prozesse verarbeiten. Wenn ein untergeordneter Prozess ausgeführt wurde, ist der übergeordnete normalerweise dafür verantwortlich, ihn aus der Prozesstabelle zu entfernen. Es ist normalerweise nicht möglich, einen Zombie-Prozess mit dem Befehl kill direkt zu entfernen, obwohl das übergeordnete Element häufig veranlasst werden kann, ihn zu entfernen, wenn der Operator die Signal Child-Benachrichtigung (SIGCHLD) verwendet. Andernfalls kann ein Zombie-Prozess indirekt entfernt werden, indem der Elternteil getötet wird.

Der Zombie-Prozess ist ein metaphorischer beschreibender Begriff, der sich auf die lebenden Toten bezieht. Defekte Prozesse in Unix® und ähnlichen Betriebssystemen können als analog zu Zombies angesehen werden, da sie eine Prozesstabellenpräsenz beibehalten, obwohl sie ihre beabsichtigten Funktionen nicht mehr ausführen. Wenn ein Prozess die Ausführung beendet hat, heißt es manchmal, er sei gestorben, während die Methode, mit der das Betriebssystem die Zuordnung der Prozesstabelle wiederherstellt, als Ernten bezeichnet werden kann. Der Elternprozess eines Zombies soll technisch gesehen seine Kinder ernten, obwohl dies nicht immer der Fall ist.

Es gibt bestimmte Fälle, in denen die Existenz eines Zombie-Prozesses beabsichtigt oder sogar gewünscht sein kann. Nachdem ein untergeordneter Prozess die Ausführung beendet hat, muss der übergeordnete möglicherweise später eine andere Instanz desselben Programms ausführen. Wenn ein Zombie nicht aus der Prozesstabelle entfernt wurde, erhält ein neues Kind nicht die gleiche Identifikation (ID) wie das alte Kind. Bestimmte Programme können von dieser Differenzierung profitieren oder sie sogar erfordern.

Wenn ein übergeordneter Prozess den Befehl wait nicht ausgeführt hat, um die Zombies zu ernten, für die er verantwortlich ist, kann das Problem möglicherweise erzwungen werden. Dies erfolgt normalerweise über den Befehl kill und das Senden des Signals SIGCHLD an den übergeordneten Prozess. Wenn alles ordnungsgemäß funktioniert, sollte ein übergeordneter Prozess, der dieses Signal empfängt, seine Zombiekinder ernten, damit deren IDs und Position in der Prozesstabelle wiederverwendet werden können.

Unter bestimmten Umständen kann ein übergeordneter Prozess das SIGCHLD-Signal ignorieren. Wenn dies auftritt und der Bediener weiterhin wünscht, dass die Prozesstabelle gelöscht wird, wird der übergeordnete Prozess möglicherweise beendet. Alle Zombies, die der übergeordnete Prozess erstellt hat, werden dann dem Init-Prozess als untergeordnete Elemente zugewiesen. Da init den Wartebefehl für seine untergeordneten Elemente regelmäßig initiiert, werden alle Zombies, für die es verantwortlich ist, schließlich aus der Prozesstabelle entfernt.

ANDERE SPRACHEN

War dieser Artikel hilfreich? Danke für die Rückmeldung Danke für die Rückmeldung

Wie können wir helfen? Wie können wir helfen?