Wat is een zombieproces:
Het is een proces dat is geëindigd, maar niet alles wordt onmiddellijk uit het geheugen verwijderd omdat de procesdescriptor in het geheugen blijft.
Wat zou het normale gedrag van een proces moeten zijn:
Wanneer een proces eindigt, wordt de status van het proces
EXIT_ZOMBIE
en de ouder van het proces op de hoogte wordt gebracht dat het onderliggende proces is overleden met de
SIGCHLD
signaal.
Het bovenliggende proces wordt dan verondersteld de
wait()
voor de systeemaanroep om de afsluitstatus van het dode proces en andere informatie te lezen. Na
wait()
wordt genoemd, wordt het zombieproces uit het geheugen verwijderd. Dit gebeurt snel, zodat u geen zombieprocessen ziet ophopen op uw systeem. Maar in gevallen waarin we verschillende zombieprocessen zien ophopen, is dit een situatie waarin de programmacode niet efficiënt is.
Hoe een zombie te vinden, processen:
De opdracht uitvoeren
top
De opdracht uitvoeren
ps -ef | grep defunct
Hoe accumulerende zombieprocessen te beëindigen:
Meestal hebben de zombieprocessen dezelfde bovenliggende proces-ID.
Er zijn twee methoden om het proces te verwijderen:
- Verzend de
SIGCHLD
signaal aan het bovenliggende proces.
Dit signaal vertelt het bovenliggende proces om het wait()
Systeem belt en ruimt zijn zombiekinderen op:
kill -s SIGCHLD <PPID>
Voorbeeld:
kill -s SIGCHLD 2201
- Dood het zombie-ouderproces
kill -9 <PPID>
Voorbeeld:
kill -9 2201