Hogyan lehet befejezni egy zombie folyamatot az operációs rendszerben?
sobes.tech MI
Válasz az MI-től
Egy zombi folyamat (defunct process) olyan folyamat, amely befejezte végrehajtását, de bejegyzése még mindig megtalálható a folyamat táblában (PCB - Process Control Block) a rendszerben, várva arra, hogy a szülő folyamat olvassa a befejezési állapotát a wait() vagy waitpid() rendszerhívás segítségével. Ha a szülő folyamat nem teszi ezt meg, vagy korábban fejeződik be, a zombi megmarad.
Nem lehet közvetlenül befejezni a zombi folyamatot, mivel már nem futtat kódot. A "befejezéshez":
-
A szülő folyamat megölése. Amikor a szülő folyamat befejezi, az operációs rendszer (init vagy systemd) elfogadja az összes árva gyermekfolyamatát. Az új szülő folyamat (PID 1) általában végrehajtja a
wait()-et a gyermekfolyamatokra, összegyűjtve azok befejezési állapotát, és lehetővé téve a rendszer számára, hogy teljesen felszabadítsa a zombi által foglalt erőforrásokat.# A zombi folyamat PID-jének megtalálása ps aux | grep 'Z' # A ps kimenetből a szülő folyamat PPID-jének megtalálása # Példa kimenet: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND # ... 1234 0.0 0.0 0 0 ? Z HH:MM 0:00 [zombie_process] <defunct> # A PPID másik mezőben lesz, vagy meg kell találni a szülő PID-jét nézve a 1234-es PID-t # Használja a pstree vagy ps -o pid,ppid,stat,cmd parancsokat # A szülő folyamat megölése (helyettesítse <PPID>-t a valódi PPID-vel) kill -9 <PPID> -
A rendszer újraindítása. Ez a legegyszerűbb, bár radikális módszer, amely garantálja a folyamatok táblájának tisztítását.
Megjegyzés: Néha a zombi folyamatok programhibából keletkeznek, ahol a szülő folyamat elfelejt wait()-et hívni a gyermekfolyamatok létrehozása után. Ilyen esetekben a programkód javítása hosszú távú megoldás.