Wie kann ich verhindern, dass zombie-Kindprozesse?
Ich Schreibe ein server, der verwendet fork()
um zu laichen-Handler für die client-verbindungen. Der server muss nicht wissen, was passiert, um die Gabel-Prozesse, – Sie funktionieren auf Ihre eigenen, und wenn Sie fertig sind, sollten Sie nur sterben, anstatt zombies. Was ist eine einfache Möglichkeit, dies zu erreichen?
InformationsquelleAutor der Frage thejh | 2013-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere Möglichkeiten, aber mit
sigaction
mitSA_NOCLDWAIT
im übergeordneten Prozess ist wohl die einfachste:InformationsquelleAutor der Antwort thejh
Doppelten Gabeln. Haben Ihre Kinder sofort fork eine Kopie und die original Kind-Prozess beenden.
http://thinkiii.blogspot.com/2009/12/double-fork-to-avoid-zombie-process.html
Dies ist einfacher als über die Signale, meiner Meinung nach, und mehr verständlich.
InformationsquelleAutor der Antwort xaxxon
How, um loszuwerden, zombie-Prozesse?
können Sie nicht töten, die zombie-Prozess mit SIGKILL-signal, die Sie töten, ein normall Prozess, Als der zombie-Prozess kann nicht erhalten ein signal. daher ist eine gute Gewohnheit ist sehr wichtig.
Dann bei der Programmierung, wie man loswerden Menge von zombie-Prozessen? Gemäß der vorstehenden Beschreibung, der Kind-Prozess senden SIGCHLD-Signale an die übergeordnete Prozess, wenn Ihr stirbt. standardmäßig wird dieses signal ignoriert wird vom system, so dass der beste Weg ist, können wir call wait() in das signal-processing-Funktion, die könnte vermeiden Sie die zombie-stick mit dem system umgehen.
siehe mehr dazu: http://itsprite.com/how-to-deep-understand-the-zombie-process-in-linux/
InformationsquelleAutor der Antwort user3060336