Vraag Wat is een proces en waarom wordt het niet gedood?


De Chrome-browser reageerde niet en ik probeerde hem te doden, maar in plaats van te verdwijnen had het proces <defunct> rechts daarvan en werd niet gedood:

enter image description here

Wat is <defunct> voor een proces en waarom het niet wordt gedood?


134
2017-10-15 11:27


oorsprong


Het geaccepteerde antwoord vermeldt dat "kill -9 PID werk niet. "Het is gedeeltelijk waar: in werkelijkheid zal GEEN moord werken. Bovendien, zou -9 als laatste redmiddel moeten worden gebruikt. 99% van de tijd zal een standaarddoding van het ouderproces het doden EN alle kinderen oogsten Een "standaard kill" is een SIGTERM (-15). Ik moedig fans van de -9 (SIGKILL) aan om te lezen stackoverflow.com/questions/690415/... - Mike S
stackoverflow.com/questions/356722/... - Aᴍɪʀ


antwoorden:


Uit uw uitvoer zien we een "ter ziele gegane", wat betekent dat het proces zijn taak heeft voltooid of is beschadigd of gedood, maar de onderliggende processen zijn nog steeds actief of dit ouderproces volgt het onderliggende proces. Om dit soort processen te doden, kill kill -9 PID niet. Je kunt ze proberen te vermoorden met deze opdracht, maar dit wordt steeds opnieuw getoond.

Bepaal wat het bovenliggende proces van dit proces is en dood het. Om dit te weten, voer je het commando uit:

ps -ef | grep defunct

UID          PID     PPID       C    STIME      TTY          TIME              CMD
1000       637      27872      0   Oct12      ?        00:00:04 [chrome] <defunct>
1000      1808      1777       0    Oct04     ?        00:00:00 [zeitgeist-datah] <defunct>

Dan kill -9 637 27872, controleer dan of het proces is beëindigd ps -ef | grep defunct.


124
2017-10-15 11:47



je kunt het proces "ter ziele gegane" niet doden. U kunt het verwijderen van de vermelding in een procestabel alleen versnellen door de bovenliggende te vernietigen. - jfs
Wat als de PPID is 1 (init)? Stel dat ik gewoon moet wachten? - Luc
om de kill te automatiseren, kunt u dit ook doen (mogelijk moet u de bytes wijzigen die u uit de uitvoer knipt): ps -ef | grep defunct | grep -v grep | cut -b8-20 | xargs kill -9 - warren
@warren Bedankt. Je kunt dat ook iets korter en (imo) eenvoudiger maken door geen tweede grep te doen. Verander gewoon de eerste grep in grep [d]efunct of vergelijkbaar en het zal zichzelf niet evenaren. - Thor84no
@warren je kunt een overgeslagen proces niet doden - zelfs niet met een SIGKILL. Bovendien gebruik je kill -9 behoorlijk willekeurig. Zien stackoverflow.com/questions/690415/.... Als u overleden kinderen wilt doden, kunt u het volgende proberen: parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill. Voer het script na ongeveer 30 seconden opnieuw uit met de kill -9 als je dat wilt. (Merk op dat ik specifiek het doden van Init) - Mike S


Handmatige pagina ps (1) zegt:

Processen gemarkeerd <defunct> zijn dode processen (de zogenaamde "Zombies")   dat blijft omdat hun ouder ze niet goed heeft vernietigd.   Deze processen zullen worden vernietigd door init(8) als het ouderproces   uitgangen.

Je kunt het niet doden omdat het al dood is. Het enige dat overblijft is een vermelding in de procestabel:

Op Unix en Unix-achtige computerbesturingssystemen, een zombie-proces of   ter ziele gegane proces is een proces dat de uitvoering heeft voltooid, maar nog steeds   heeft een vermelding in de procestabel. Deze invoer is nog steeds nodig om toe te staan   het bovenliggende proces om de uitgangsstatus van het kind te lezen.

Het is niet schadelijk om dergelijke processen te laten verlopen, tenzij er veel van zijn. Zombie wordt uiteindelijk door de ouder geoogst (door te bellen wait(2)). Als de oorspronkelijke ouder het niet heeft geplukt voor zijn eigen uitgang dan init werkwijze (pid == 1) doet het op een later tijdstip. Zombie-proces is gewoon:

Een proces dat is beëindigd en dat wordt verwijderd wanneer de exit-status is bereikt   is gerapporteerd aan een ander proces dat op dat proces wacht   te beeindigen.


44
2018-02-27 20:53