Zum Inhalt springen

Zombie: Unterschied zwischen den Versionen

Aus Foxwiki
Die 5 zuletzt angesehenen Seiten:  Common Criteria » anacron » BSI/200-2/Verbesserung » SATA » Zombie
Die Seite wurde neu angelegt: „'''topic''' - Kurzbeschreibung == Beschreibung == == Installation == == Syntax == === Optionen === === Parameter === === Umgebungsvariablen === === Exit-Status === == Anwendungen == === Fehlerbehebung === == Konfiguration == === Dateien === == Siehe auch == === Unterseiten === {{Special:PrefixIndex/{{BASEPAGENAME}}}} === Sicherheit === === Dokumentation === ==== RFC ==== ==== Man-Pages ==== ==== Info-Pages ==== === Links === ==== Einzelnachweise ==== <ref…“
 
K Textersetzung - „–“ durch „-“
 
(60 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''topic''' - Kurzbeschreibung
'''Zombie''' - (Zombie-Prozess) Prozesstabelleneintrag eines beendeten [[Prozess (Informatik)|Prozess]]es
 
== Beschreibung ==
== Beschreibung ==
== Installation ==
'''Zombie-Prozess''' sind bei [[Unixoides System|unixartigen]] [[Betriebssystem]]en ein Prozesstabelleneintrag eines beendeten [[Prozess (Informatik)|Prozess]]es
== Syntax ==
=== Optionen ===
=== Parameter ===
=== Umgebungsvariablen ===
=== Exit-Status ===
== Anwendungen ==
=== Fehlerbehebung ===
== Konfiguration ==
=== Dateien ===
== Siehe auch ==
=== Unterseiten ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
=== Sicherheit ===
=== Dokumentation ===
==== RFC ====
==== Man-Pages ====
==== Info-Pages ====
=== Links ===
==== Einzelnachweise ====
<references />
==== Projekt ====
==== Weblinks ====
<noinclude>
== Testfragen ==
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>
</noinclude>
= Wikipedia =
Als '''Zombie-Prozess''' wird bei [[Unixoides System|unixartigen]] [[Betriebssystem]]en der Prozesstabelleneintrag eines beendeten [[Prozess (Informatik)|Prozess]]es bezeichnet. Ein beendeter Prozess wird aus der Prozesstabelle entfernt, sobald sein Elternprozess dessen [[Return Code|Exit-Status]] abfragt. Bis dahin verbleibt er dort als Zombie, der keine weiteren Ressourcen außer dem Tabelleneintrag, der [[Prozess-ID]] und Einträgen in Nutzungs-Statistiken mehr belegt.


Aus unten genauer beschriebenen Gründen bei der Prozessverwaltung wird ein beendeter Prozess manchmal nicht aus der Prozesstabelle entfernt (und belegt somit geringfügige Systemressourcen). Ein solcher, ''langlebiger'' Zombie richtet selbst keinen Schaden an, kann aber ein Hinweis auf einen Fehler sein.
; Normaler Ablauf
Beendete Prozesse werden aus der Prozesstabelle entfernt
* sobald der Elternprozess seinen [[Return Code|Exit-Status]] abfragt


== Entstehung von Zombieprozessen ==
Bis dahin verbleibt er dort als Zombie
Wenn ein Prozess einen neuen Prozess startet (mittels [[Fork (Unix)|Forking]]), wird der alte ''Elternprozess'' und der neue ''Kindprozess'' genannt. Wenn der Kindprozess beendet wird, kann der Elternprozess vom Betriebssystem erfragen, auf welche Art der Kindprozess beendet wurde: erfolgreich, mit Fehler, abgestürzt, abgebrochen etc.
* der keine weiteren Ressourcen außer dem Tabelleneintrag, der [[Prozess-ID]] und Einträgen in Nutzungs-Statistiken mehr belegt


Um diese Abfrage zu ermöglichen, bleibt der Eintrag, nachdem der Prozess beendet wurde, in der Prozesstabelle stehen, bis der Elternprozess diese Abfrage durchführt&nbsp;– egal ob diese Information gebraucht wird oder nicht. Bis dahin hat der Kindprozess den Zustand ''Zombie.'' In diesem Zustand belegt der Prozess selbst keinen Arbeitsspeicher mehr, bis auf den Eintrag in der Prozesstabelle des [[Kernel (Betriebssystem)|Kernels]] und verbraucht auch keine Rechenzeit, jedoch behält er seine [[Process ID|PID]], die (noch) nicht für andere Prozesse wiederverwendet werden kann.
; Langlebige Zombies
Aus unten beschriebenen Gründen wird ein beendeter Prozess manchmal nicht aus der Prozesstabelle entfernt und belegt geringfügige Systemressourcen


Der Kernel sendet an den Elternprozess ein spezielles [[Signal (Unix)|Signal]], nämlich SIGCHLD, sobald eines seiner Kinder beendet wird, um ihm mitzuteilen, dass er eine Statusabfrage durchführen kann, damit es endgültig verschwindet. (Die Statusabfrage darf der Elternprozess auch direkt im [[Rückruffunktion|Handler]] für dieses Signal durchführen.) Führt der Elternprozess keine Statusabfrage durch, verbleibt das Kind im Zombie-Zustand in der Prozesstabelle.<ref>[https://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html#tag_16_01_03_01 The Open Group Base Specifications] Issue 7, 2018 edition IEEE Std 1003.1™-2017 (Revision of IEEE Std 1003.1-2008): Consequences of Process Termination</ref>
Ein solcher, ''langlebiger'' Zombie richtet selbst keinen Schaden an
* kann aber ein Hinweis auf einen Fehler sein


== Verwaiste Prozesse ==
== Entstehung ==
Ein weiterer Spezialfall, der an und für sich unabhängig von Zombies ist, jedoch in Kombination damit auftreten kann, ist, wenn der Elternprozess beendet wird. In diesem Fall werden alle seine Kindprozesse „[[Waise|verwaist]]“ genannt. Die Kindprozesse werden dann per Definition vom Prozess mit der [[Process ID|PID]]&nbsp;1 „adoptiert“ und bekommen diesen als Elternprozess zugewiesen. (In der klassischen [[System V|System-V]]-Bootfolge hat der sogenannte ''init''-Prozess die PID&nbsp;1. Bei OS&nbsp;X tritt [[launchd]] an diese Stelle. Häufig wird bei Linux-Systemen hier [[systemd]] verwendet.) Dies passiert für laufende genauso wie für Zombieprozesse, deren Eltern nicht mehr existieren.
; Entstehung von Zombieprozessen
Wenn ein [[Prozess]] einen neuen Prozess startet (mittels [[Fork (Unix)|Forking]]), wird der alte ''Elternprozess'' und der neue ''Kindprozess'' genannt
* Wenn der Kindprozess beendet wird, kann der Elternprozess vom Betriebssystem erfragen, auf welche Art der Kindprozess beendet wurde
* erfolgreich, mit Fehler, abgestürzt, abgebrochen etc


== Probleme von Zombies ==
Um diese Abfrage zu ermöglichen, bleibt der Eintrag, nachdem der Prozess beendet wurde, in der Prozesstabelle stehen, bis der Elternprozess diese Abfrage durchführt&nbsp;- egal ob diese Information gebraucht wird oder nicht
Zombies stellen in der Regel kein Problem für ein Betriebssystem dar, da diese Prozesse bereits beendet wurden und nur sehr wenige Systemressourcen in Anspruch nehmen. Allerdings kann der verursachende Fehler im Elternprozess unter Umständen, wie beispielsweise bei hoher Belastung, weit größere Folgen haben. Eine große Anzahl von Zombies kann auch dazu führen, dass dem Kernel die freien PIDs, die er für neue Prozesse braucht, ausgehen. Die PID-Belegung durch Zombies ist unter Umständen problematischer als deren minimaler Speicherverbrauch. Ist die Anzahl an Prozessen auf einem System limitiert (unter anderem via maxproc in limits.conf, um beispielsweise eine [[Forkbomb]] in ihrer Auswirkung zu begrenzen), so führen zu viele Zombies dazu, dass der Kernel keine neuen Prozesse mehr erzeugt.
* Bis dahin hat der Kindprozess den Zustand ''Zombie.'' In diesem Zustand belegt der Prozess selbst keinen Arbeitsspeicher mehr, bis auf den Eintrag in der Prozesstabelle des [[Kernel (Betriebssystem)|Kernels]] und verbraucht auch keine Rechenzeit, jedoch behält er seine [[Process ID|PID]], die (noch) nicht für andere Prozesse wiederverwendet werden kann


== Behandlung von Zombieprozessen ==
Der Kernel sendet an den Elternprozess ein spezielles [[Signal (Unix)|Signal]], nämlich [[SIGCHLD]], sobald eines seiner Kinder beendet wird, um ihm mitzuteilen, dass er eine Statusabfrage durchführen kann, damit es endgültig verschwindet
Obwohl Zombieprozesse in der Regel keine Gefahr für das System darstellen, können sie dennoch manuell gelöscht werden – oder auch automatisiert vom System.
* Die Statusabfrage darf der Elternprozess auch direkt im [[Rückruffunktion|Handler]] für dieses Signal durchführen
* Führt der Elternprozess keine Statusabfrage durch, verbleibt das Kind im Zombie-Zustand in der Prozesstabelle


=== Automatisiertes Löschen ===
; Prozesse
Der [[init|init-Prozess]] hat unter anderem die Aufgabe, den Beendigungszustand aller seiner Kinder abzufragen, sobald diese beendet –&nbsp;also in den Zombie-Zustand überführt&nbsp;– werden. Damit sorgt er dafür, dass keine überflüssigen Zombies im System vorhanden sind. Laufende Prozesse, die vom init-Prozess adoptiert werden, werden dadurch nicht beeinträchtigt. Hier wartet der init-Prozess einfach, bis sie fertig sind, und fragt anschließend deren Status ab.
Weiterer Fall, der an und für sich unabhängig von Zombies ist, jedoch in Kombination damit auftreten kann, ist, wenn der Elternprozess beendet wird
* In diesem Fall werden alle seine Kindprozesse "[[Waise|verwaist]]" genannt
* Die Kindprozesse werden dann per Definition vom Prozess mit der [[Process ID|PID]]&nbsp;1 "adoptiert" und bekommen diesen als Elternprozess zugewiesen. (In der klassischen [[System V|System-V]]-Bootfolge hat der sogenannte ''init''-Prozess die PID&nbsp;1
* Bei OS&nbsp;X tritt [[launchd]] an diese Stelle
* Häufig wird bei Linux-Systemen hier [[systemd]] verwendet.) Dies passiert für laufende genauso wie für Zombieprozesse, deren Eltern nicht mehr existieren


Alternativ kann man dem Elternprozess des Zombies (laut PPID-Angabe in der Prozesstabelle, zum Beispiel von <code style="white-space: nowrap">ps axo stat,pid,comm,ppid | grep '^Z'</code>) manuell das Signal SIGCHLD senden, auf der [[Kommandozeile]] etwa mittels <code style="white-space: nowrap">kill -CHLD &lt;PID des Elternprozesses&gt; </code>. Reagiert der Elternprozess darauf nicht, so kann man den Elternprozess beenden, damit das Zombie-Kind vom init-Prozess adoptiert und sofort danach durch Abfrage seines Zustands endgültig gelöscht wird.
== Probleme mit Zombies ==
; Zombies stellen kein Problem dar
Zombies stellen in der Regel kein Problem für ein Betriebssystem dar
* da diese Prozesse bereits beendet wurden und nur sehr wenige Systemressourcen in Anspruch nehmen


=== Besonderheit im Linux-Kernel ===
; Allerdings kann der verursachende Fehler im Elternprozess unter Umständen
Der [[Linux (Kernel)|Linux-Kernel]] bietet für Prozesse, die nicht am Status ihrer Kinder interessiert sind, eine einfache –&nbsp;allerdings nicht standardisierte&nbsp;– Methode, Zombies loszuwerden: Gibt ein Prozess ''explizit'' an, dass er SIGCHLD ignorieren will (im Gegensatz zum Ignorieren per Default, wenn kein Handler angegeben ist), so löscht Linux die Zombies automatisch, ohne auf eine Statusabfrage zu warten.
Wie beispielsweise bei hoher Belastung, weit größere Folgen haben
* Eine große Anzahl von Zombies kann auch dazu führen, dass dem Kernel die freien PIDs, die er für neue Prozesse braucht, ausgehen
* Die PID-Belegung durch Zombies ist unter Umständen problematischer als deren minimaler Speicherverbrauch


=== Programmierfehler beseitigen ===
Ist die Anzahl an Prozessen auf einem System limitiert
Wenn ein Prozess seine Kinder oftmals „vergisst“ und zu Zombies werden lässt, besonders wenn er auch auf ein manuelles SIGCHLD nicht reagiert, ist das meistens ein Hinweis auf einen [[Programmfehler|Bug]] in diesem Programm. Aus oben genannten Gründen sollten diese Fehler im Programm beseitigt werden, um das System durch die entstehenden Zombies nicht zu beeinträchtigen.
* unter anderem via maxproc in limits.conf, um beispielsweise eine [[Forkbomb]] in ihrer Auswirkung zu begrenzen
so führen zu viele Zombies dazu, dass der Kernel keine neuen Prozesse mehr erzeugt


== Beispiel in C zur Erzeugung von Zombies ==
== Behandlung ==
''Synchrones'' Warten auf denselben Kindprozess in einer fest definierten Reihenfolge kann Zombieprozesse erzeugen und diese sogar über eine lange Zeit am Leben erhalten. Dies ist nicht notwendigerweise ein Programmierfehler, wie im folgenden Codebeispiel zu sehen ist:
; Behandlung von Zombieprozessen
Obwohl Zombieprozesse in der Regel keine Gefahr für das System darstellen, können sie dennoch manuell gelöscht werden - oder auch automatisiert vom System


<syntaxhighlight lang="c">
=== Automatisiertes Löschen ===
#include <sys/wait.h>
Der [[init|init-Prozess]] hat unter anderem die Aufgabe, den Beendigungszustand aller seiner Kinder abzufragen, sobald diese beendet -&nbsp;also in den Zombie-Zustand überführt&nbsp;- werden
#include <stdlib.h>
* Damit sorgt er dafür, dass keine überflüssigen Zombies im System vorhanden sind
#include <unistd.h>
* Laufende Prozesse, die vom init-Prozess adoptiert werden, werden dadurch nicht beeinträchtigt
* Hier wartet der init-Prozess einfach, bis sie fertig sind, und fragt anschließend deren Status ab


int main(void){
Alternativ kann man dem Elternprozess des Zombies laut PPID-Angabe in der Prozesstabelle, zum Beispiel von
    pid_t pids[10]; // Platz für 10 Prozess-IDs (die Kindprozesse)
ps axo stat,pid,comm,ppid | grep '^Z'
    int i; // Laufvariable
manuell das Signal SIGCHLD senden, auf der [[Kommandozeile]] etwa mittels
kill -CHLD &lt;PID des Elternprozesses&gt;


    for (i = 0; i < 10; ++i) {
Reagiert der Elternprozess darauf nicht, so kann man den Elternprozess beenden, damit das Zombie-Kind vom init-Prozess adoptiert und sofort danach durch Abfrage seines Zustands endgültig gelöscht wird
        // Der Elternprozess erzeugt nun einen Kindprozess,
        // welcher unabhängig vom Elternprozess mit der
        // erneuten Ausführung des Programms beginnt.
        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
        pids[i] = fork();
        if (pids[i] == 0) {
            // dann befinden wir uns in einem der 10 Kindprozesse
            // Der erste Kindprozess wartet 10 Sekunden und jeder
            // weitere Kindprozess wartet 1 Sekunde kürzer als der
            // vorige.
            sleep(10-i);
            exit(0); // Kindprozess erfolgreich beenden
        }
    }


    // hier kommt nur der Elternprozess vorbei
=== Linux-Kernel ===
    for (i = 0; i < 10; ++i){
; Besonderheit im Linux-Kernel
        // Der Elternprozess wartet nun, bis der Reihe nach jeder
Der [[Linux (Kernel)|Linux-Kernel]] bietet für Prozesse, die nicht am Status ihrer Kinder interessiert sind, eine einfache -&nbsp;allerdings nicht standardisierte&nbsp;- Methode, Zombies loszuwerden
        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
* Gibt ein Prozess ''explizit'' an, dass er SIGCHLD ignorieren will (im Gegensatz zum Ignorieren per Default, wenn kein Handler angegeben ist), so löscht Linux die Zombies automatisch, ohne auf eine Statusabfrage zu warten
        // Kind mit der längsten Wartezeit zuerst gewartet. Obwohl
        // die anderen Kinder längst erfolgreich beendet wurden,
        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
        waitpid(pids[i], NULL, 0);
    }


    return 0; // Elternprozess erfolgreich beenden
=== Programmierfehler ===
}
; Programmierfehler beseitigen
</syntaxhighlight>
Wenn ein Prozess seine Kinder oftmals "vergisst" und zu Zombies werden lässt, besonders wenn er auch auf ein manuelles SIGCHLD nicht reagiert, ist das meistens ein Hinweis auf einen [[Programmfehler|Bug]] in diesem Programm
* Aus oben genannten Gründen sollten diese Fehler im Programm beseitigt werden, um das System durch die entstehenden Zombies nicht zu beeinträchtigen


Dennoch ist das Verhalten nicht optimal. Eine bessere Alternative bestünde darin, auf einen beliebigen Prozess zu warten, ihn im Array als erledigt zu markieren und diesen Prozess fortzuführen, bis das Array leer ist.
<noinclude>


== Literatur ==
== Anhang ==
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
=== Links ===
==== Weblinks ====
# https://de.wikipedia.org/wiki/Zombie-Prozess


* Michael Kerrisk: ''The Linux Programming Interface'', Chapter 26: ''Monitoring Child Processes''. No Starch Press, San Francisco 2010, ISBN 978-1-59327-220-3. (engl.)
[[Kategorie:Linux/Prozess]]


== Einzelnachweise ==
</noinclude>
<references />
 
== Siehe auch ==
* [[Daemon]]
 
[[Kategorie:Betriebssystemtheorie]]

Aktuelle Version vom 11. Mai 2025, 20:58 Uhr

Zombie - (Zombie-Prozess) Prozesstabelleneintrag eines beendeten Prozesses

Beschreibung

Zombie-Prozess sind bei unixartigen Betriebssystemen ein Prozesstabelleneintrag eines beendeten Prozesses

Normaler Ablauf

Beendete Prozesse werden aus der Prozesstabelle entfernt

Bis dahin verbleibt er dort als Zombie

  • der keine weiteren Ressourcen außer dem Tabelleneintrag, der Prozess-ID und Einträgen in Nutzungs-Statistiken mehr belegt
Langlebige Zombies

Aus unten beschriebenen Gründen wird ein beendeter Prozess manchmal nicht aus der Prozesstabelle entfernt und belegt geringfügige Systemressourcen

Ein solcher, langlebiger Zombie richtet selbst keinen Schaden an

  • kann aber ein Hinweis auf einen Fehler sein

Entstehung

Entstehung von Zombieprozessen

Wenn ein Prozess einen neuen Prozess startet (mittels Forking), wird der alte Elternprozess und der neue Kindprozess genannt

  • Wenn der Kindprozess beendet wird, kann der Elternprozess vom Betriebssystem erfragen, auf welche Art der Kindprozess beendet wurde
  • erfolgreich, mit Fehler, abgestürzt, abgebrochen etc

Um diese Abfrage zu ermöglichen, bleibt der Eintrag, nachdem der Prozess beendet wurde, in der Prozesstabelle stehen, bis der Elternprozess diese Abfrage durchführt - egal ob diese Information gebraucht wird oder nicht

  • Bis dahin hat der Kindprozess den Zustand Zombie. In diesem Zustand belegt der Prozess selbst keinen Arbeitsspeicher mehr, bis auf den Eintrag in der Prozesstabelle des Kernels und verbraucht auch keine Rechenzeit, jedoch behält er seine PID, die (noch) nicht für andere Prozesse wiederverwendet werden kann

Der Kernel sendet an den Elternprozess ein spezielles Signal, nämlich SIGCHLD, sobald eines seiner Kinder beendet wird, um ihm mitzuteilen, dass er eine Statusabfrage durchführen kann, damit es endgültig verschwindet

  • Die Statusabfrage darf der Elternprozess auch direkt im Handler für dieses Signal durchführen
  • Führt der Elternprozess keine Statusabfrage durch, verbleibt das Kind im Zombie-Zustand in der Prozesstabelle
Prozesse

Weiterer Fall, der an und für sich unabhängig von Zombies ist, jedoch in Kombination damit auftreten kann, ist, wenn der Elternprozess beendet wird

  • In diesem Fall werden alle seine Kindprozesse "verwaist" genannt
  • Die Kindprozesse werden dann per Definition vom Prozess mit der PID 1 "adoptiert" und bekommen diesen als Elternprozess zugewiesen. (In der klassischen System-V-Bootfolge hat der sogenannte init-Prozess die PID 1
  • Bei OS X tritt launchd an diese Stelle
  • Häufig wird bei Linux-Systemen hier systemd verwendet.) Dies passiert für laufende genauso wie für Zombieprozesse, deren Eltern nicht mehr existieren

Probleme mit Zombies

Zombies stellen kein Problem dar

Zombies stellen in der Regel kein Problem für ein Betriebssystem dar

  • da diese Prozesse bereits beendet wurden und nur sehr wenige Systemressourcen in Anspruch nehmen
Allerdings kann der verursachende Fehler im Elternprozess unter Umständen

Wie beispielsweise bei hoher Belastung, weit größere Folgen haben

  • Eine große Anzahl von Zombies kann auch dazu führen, dass dem Kernel die freien PIDs, die er für neue Prozesse braucht, ausgehen
  • Die PID-Belegung durch Zombies ist unter Umständen problematischer als deren minimaler Speicherverbrauch

Ist die Anzahl an Prozessen auf einem System limitiert

  • unter anderem via maxproc in limits.conf, um beispielsweise eine Forkbomb in ihrer Auswirkung zu begrenzen

so führen zu viele Zombies dazu, dass der Kernel keine neuen Prozesse mehr erzeugt

Behandlung

Behandlung von Zombieprozessen

Obwohl Zombieprozesse in der Regel keine Gefahr für das System darstellen, können sie dennoch manuell gelöscht werden - oder auch automatisiert vom System

Automatisiertes Löschen

Der init-Prozess hat unter anderem die Aufgabe, den Beendigungszustand aller seiner Kinder abzufragen, sobald diese beendet - also in den Zombie-Zustand überführt - werden

  • Damit sorgt er dafür, dass keine überflüssigen Zombies im System vorhanden sind
  • Laufende Prozesse, die vom init-Prozess adoptiert werden, werden dadurch nicht beeinträchtigt
  • Hier wartet der init-Prozess einfach, bis sie fertig sind, und fragt anschließend deren Status ab

Alternativ kann man dem Elternprozess des Zombies laut PPID-Angabe in der Prozesstabelle, zum Beispiel von

ps axo stat,pid,comm,ppid | grep '^Z'

manuell das Signal SIGCHLD senden, auf der Kommandozeile etwa mittels

kill -CHLD <PID des Elternprozesses>

Reagiert der Elternprozess darauf nicht, so kann man den Elternprozess beenden, damit das Zombie-Kind vom init-Prozess adoptiert und sofort danach durch Abfrage seines Zustands endgültig gelöscht wird

Linux-Kernel

Besonderheit im Linux-Kernel

Der Linux-Kernel bietet für Prozesse, die nicht am Status ihrer Kinder interessiert sind, eine einfache - allerdings nicht standardisierte - Methode, Zombies loszuwerden

  • Gibt ein Prozess explizit an, dass er SIGCHLD ignorieren will (im Gegensatz zum Ignorieren per Default, wenn kein Handler angegeben ist), so löscht Linux die Zombies automatisch, ohne auf eine Statusabfrage zu warten

Programmierfehler

Programmierfehler beseitigen

Wenn ein Prozess seine Kinder oftmals "vergisst" und zu Zombies werden lässt, besonders wenn er auch auf ein manuelles SIGCHLD nicht reagiert, ist das meistens ein Hinweis auf einen Bug in diesem Programm

  • Aus oben genannten Gründen sollten diese Fehler im Programm beseitigt werden, um das System durch die entstehenden Zombies nicht zu beeinträchtigen


Anhang

Siehe auch

Links

Weblinks

  1. https://de.wikipedia.org/wiki/Zombie-Prozess