Vad är en zombieprocess:
Det är en process som avslutats men inte allt tas omedelbart bort från minnet eftersom dess processbeskrivning finns kvar i minnet.
Vad bör vara det normala beteendet för en process:
När en process avslutas blir processens status
EXIT_ZOMBIE
och processens överordnade underrättas om att dess underordnade process har dött med
SIGCHLD
signal.
Den överordnade processen är sedan tänkt att köra
wait()
för att systemanropet ska läsa den döda processens avslutningsstatus och annan information. Efter
wait()
anropas, tas zombieprocessen bort från minnet. Detta sker snabbt, så du ser inte zombieprocesser ackumuleras på ditt system. Men i de fall där vi ser flera zombieprocesser ackumuleras är detta en situation där programkoden inte är effektiv.
Hur man hittar en zombieprocess:
Köra kommandot
top
Köra kommandot
ps -ef | grep defunct
Så här avslutar du ackumulerande zombieprocesser:
För det mesta har zombieprocesserna samma överordnade process-ID.
Det finns två metoder för att ta bort processen:
- Skicka
SIGCHLD
signal till den överordnade processen.
Den här signalen talar om för den överordnade processen att köra wait()
Systemanrop och städa upp sina zombiebarn:
kill -s SIGCHLD <PPID>
Exempel:
kill -s SIGCHLD 2201
- Döda den överordnade zombieprocessen
kill -9 <PPID>
Exempel:
kill -9 2201