Zombieprocess
Andra namn: defunct-process, zombie process
Kort svar
En zombieprocess är en process som har kört klart men fortfarande har en post i processtabellen, eftersom dess överordnade process ännu inte har hämtat dess avslutningsstatus. Den använder ingen processortid och nästan inget minne.
När en process avslutas sparar systemet en liten post så att den överordnade processen kan ta reda på hur den avslutades. Normalt läser den överordnade processen posten direkt och posten försvinner. Om det aldrig sker ligger den avslutade processen kvar i listan som en zombie.
Några få zombier är ofarliga. Ett antal som stadigt växer pekar på en bugg i det överordnade programmet.
På den här sidan
Så hittar du zombieprocesser på en Mac
Kör ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/' i Terminal. Varje rad är en zombie, och kolumnen PPID visar vilken överordnad process som är ansvarig för den.
Så blir du av med en zombieprocess
Du kan inte döda en zombie, eftersom den redan har avslutats. Lösningen finns hos den överordnade processen. Avsluta eller starta om den överordnade appen, så lämnas zombien över till launchd, som städar bort den.
Avsluta inte launchd eller andra systemprocesser för att bli av med zombier. Om den överordnade processen är en systemprocess försvinner de när du startar om datorn.
Så hittar du den överordnade processen till en zombie
I kolumnen med hela kommandot i ps visas en zombie som <defunct>, eftersom programmet redan har avslutats. Det är den överordnade processen du ska ta itu med.
- Kör
ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/'för att lista zombier. Z i kolumnen STAT markerar en zombie. - Anteckna talet i kolumnen PPID.
- Kör
ps -p <PPID> -o pid,user,commandför att se vilket program som är den överordnade processen. - I Aktivitetskontroll väljer du Innehåll > Alla processer, hierarkiskt för att se samma träd med överordnade och underordnade processer.
- Ta itu med den överordnade processen. Om det är en app du har öppnat avslutar du den och öppnar den igen. Om det är ett skal eller ett skript i Terminal stänger du fönstret eller stoppar skriptet. Om det är en systemprocess startar du om datorn.
Normalt eller oroande
Ett överordnat program hämtar en underordnad process avslutningsstatus med systemanropen i familjen wait. Ett program som startar underordnade processer men aldrig väntar på dem lämnar zombier efter sig. Det är en bugg i det överordnade programmet, och bara dess utvecklare kan åtgärda den för gott.
Att se en zombie en kort stund är normalt. Den finns mellan det att en process avslutas och det att den överordnade processen läser dess avslutningsstatus, vilket oftast går mycket snabbt.
Det är värt en titt när samma överordnade process har många zombier kvar, eller när antalet fortsätter att växa i timmar. Kör ps -axo stat | grep -c '^Z' för att räkna dem. Kör sysctl kern.maxproc kern.maxprocperuid för att se processgränserna på din Mac.
Zombieprocesser, föräldralösa processer och låsta processer är olika saker
De här tre begreppen blandas ofta ihop, och vart och ett kräver en egen lösning.
- En zombie har kört klart. Bara dess post i processtabellen finns kvar.
- En föräldralös process körs fortfarande, men dess överordnade process har avslutats. macOS lämnar över den till launchd, PID 1, som blir dess nya överordnade process.
- En låst process körs fortfarande men har fastnat, och visas ofta som Svarar inte i Aktivitetskontroll. Till skillnad från en zombie kan den avslutas eller tvångsavslutas.
Vad du inte ska göra
Zombier är ofarliga i små antal, så det finns ingen anledning att ta risker för att bli av med dem.
- Kör inte
kill -9på zombiens PID. Den har redan avslutats, så signalen har ingen effekt. - Avsluta inte launchd eller andra systemprocesser för att bli av med zombier. En omstart gör samma sak på ett säkert sätt.
- Avsluta inte den överordnade processen utan att kontrollera vad den är. Om det är en app med öppna dokument sparar du ditt arbete först.
Frågor som folk ställer
Vad är en zombieprocess på en Mac?
Det är en process som har avslutats men fortfarande finns i listan eftersom dess överordnade process inte har hämtat dess avslutningsstatus. Den använder ingen processortid.
Hur dödar jag en zombieprocess?
Du kan inte döda den direkt. Avsluta eller starta om dess överordnade process, som visas i kolumnen PPID i ps, så försvinner zombien.
Är zombieprocesser skadliga?
Några få är det inte. Var och en tar en plats i processtabellen, så ett stort och växande antal kan till slut orsaka problem och pekar på ett överordnat program med buggar.
Varför kan kill -9 inte ta bort en zombieprocess?
En zombie körs inte, så det finns inget för signalen att stoppa. Den försvinner bara när den överordnade processen hämtar dess avslutningsstatus, eller när den överordnade processen avslutas.
Försvinner zombieprocesser när jag startar om datorn?
Ja. En omstart avslutar alla processer, även zombier och deras överordnade processer.
Är zombieprocesser ett tecken på skadlig kod?
Nej. De är en normal del av hur Unix-processer avslutas. Många zombier från samma överordnade process betyder oftast att programmet har en bugg.
Relaterat
Kommer du från Windows? Läs om Aktivitetshanteraren för Mac, eller om de bästa alternativen till Aktivitetskontroll. Eller bläddra bland alla begrepp i ordlistan.