Woordenlijst/Als er iets misgaat
Zombieproces
Ook: defunct proces, zombie
Kort antwoord
Een zombieproces is een proces dat klaar is met draaien maar nog in de procestabel staat, omdat zijn bovenliggende proces de afsluitstatus nog niet heeft opgehaald. Het gebruikt geen CPU en bijna geen geheugen.
Als een proces eindigt, bewaart het systeem een klein verslag, zodat het bovenliggende proces kan zien hoe het is afgesloten. Normaal leest het bovenliggende proces dat verslag meteen en verdwijnt de regel. Doet het dat nooit, dan blijft het beëindigde proces als zombie in de lijst staan.
Een paar zombies kunnen geen kwaad. Een aantal dat gestaag groeit, wijst op een bug in het bovenliggende programma.
Zo vind je zombieprocessen op een Mac
Voer in Terminal ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/' uit. Elke regel is een zombie, en de kolom PPID toont het bovenliggende proces dat ervoor verantwoordelijk is.
Zo kom je van een zombieproces af
Je kunt een zombie niet stoppen, want hij is al beëindigd. De oplossing ligt bij het bovenliggende proces. Stop of herstart de bovenliggende app, dan gaat de zombie over naar launchd, dat hem opruimt.
Stop launchd of andere systeemprocessen niet om zombies op te ruimen. Is het bovenliggende proces een systeemproces, dan ruimt een herstart van de Mac ze op.
Zo vind je het bovenliggende proces van een zombie
In de kolom met de volledige opdracht van ps staat een zombie als <defunct>, omdat zijn programma al is beëindigd. Het bovenliggende proces is het proces waar je iets mee moet.
- Voer
ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/'uit om zombies te tonen. De Z in de kolom STAT geeft een zombie aan. - Noteer het getal in de kolom PPID.
- Voer
ps -p <PPID> -o pid,user,commanduit om te zien welk programma het bovenliggende proces is. - Kies in Activiteitenweergave Weergave > Alle processen, hiërarchisch om dezelfde boom van bovenliggende en onderliggende processen te zien.
- Pak het bovenliggende proces aan. Is het een app die je hebt geopend, stop hem dan en open hem opnieuw. Is het een shell of een script in Terminal, sluit dan dat venster of stop het script. Is het een systeemproces, herstart dan de Mac.
Normaal of zorgwekkend
Een bovenliggend programma haalt de afsluitstatus van een onderliggend proces op met de systeemaanroepen uit de wait-familie. Een programma dat onderliggende processen start maar nooit op ze wacht, laat zombies achter. Dat is een bug in het bovenliggende programma, en alleen de ontwikkelaar ervan kan het blijvend oplossen.
Heel even een zombie zien is normaal. Hij bestaat tussen het moment dat een proces eindigt en het moment dat het bovenliggende proces de afsluitstatus leest, en dat is meestal heel kort.
Het is het bekijken waard als hetzelfde bovenliggende proces veel zombies laat rondhangen, of als hun aantal urenlang blijft groeien. Voer ps -axo stat | grep -c '^Z' uit om ze te tellen. Voer sysctl kern.maxproc kern.maxprocperuid uit om de proceslimieten op je Mac te zien.
Zombie-, wees- en vastgelopen processen zijn niet hetzelfde
Deze drie begrippen worden vaak door elkaar gehaald, en elk vraagt om een andere oplossing.
- Een zombie is klaar met draaien. Alleen zijn regel in de procestabel is over.
- Een weesproces draait nog, maar zijn bovenliggende proces is beëindigd. macOS geeft het aan launchd, PID 1, dat het nieuwe bovenliggende proces wordt.
- Een vastgelopen proces draait nog maar zit vast, en staat in Activiteitenweergave vaak op Reageert niet. Anders dan een zombie kun je het stoppen of geforceerd stoppen.
Wat je niet moet doen
Zombies kunnen in kleine aantallen geen kwaad, dus er is geen reden om risico's te nemen om ze op te ruimen.
- Voer geen
kill -9uit op de PID van de zombie. Hij is al beëindigd, dus het signaal heeft geen effect. - Stop launchd of andere systeemprocessen niet om zombies op te ruimen. Een herstart doet hetzelfde, maar dan veilig.
- Stop het bovenliggende proces niet zonder te controleren wat het is. Is het een app met open documenten, bewaar dan eerst je werk.
Vragen die mensen stellen
Wat is een zombieproces op een Mac?
Het is een proces dat klaar is maar nog in de lijst staat, omdat zijn bovenliggende proces de afsluitstatus niet heeft opgehaald. Het gebruikt geen CPU.
Hoe stop ik een zombieproces?
Direct stoppen kan niet. Stop of herstart het bovenliggende proces, dat je in de kolom PPID van ps ziet, en de zombie verdwijnt.
Zijn zombieprocessen schadelijk?
Een paar niet. Elk neemt een plek in de procestabel in, dus een groot en groeiend aantal kan uiteindelijk problemen geven, en wijst op een bovenliggend programma met een bug.
Waarom kan kill -9 een zombieproces niet verwijderen?
Een zombie draait niet, dus er is niets wat het signaal kan stoppen. Hij verdwijnt pas als zijn bovenliggende proces de afsluitstatus ophaalt, of zelf stopt.
Verwijdert een herstart van de Mac zombieprocessen?
Ja. Een herstart beëindigt elk proces, ook zombies en hun bovenliggende processen.
Zijn zombieprocessen een teken van malware?
Nee. Ze horen gewoon bij hoe Unix-processen eindigen. Veel zombies van één bovenliggend proces betekenen meestal dat dat programma een bug heeft.
Gerelateerd
Kom je van Windows? Bekijk Taakbeheer voor Mac, of de beste alternatieven voor Activiteitenweergave. Of blader door alle begrippen in de woordenlijst.