Kaip panaikinti zombie process?
Zombių būna ne vien Holivudo filmuose, linukse jie taip pat kartais apsigyvena. Kitaip nei filmuose, linuxe zombiai (procesai), nėra kenksmingi ir nėra užkrečiami (angl. zombie process).
Kaip aptikti zombį procesą?
Tam naudojame:
# top
arba
# ps aux | awk '{ print $8 " " $2 }' | grep -w Z
išveda informaciją:
Z 4104 Z 5320 Z 2945 Z 17607
arba
# ps aux | awk '{ print $8 " " $2 " " $11}' | grep -w Z
išveda:
Tikriausiai apie jį norėsite sužinoti daugiau informacijos, koks procesas nenori mirti ir iš kur jis atsirado? Informaciją apie zombį parodys ši komanda:
$ ps -el | grep Z
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 Z 0 17607 1671 0 80 0 - 0 ? ? 00:00:00 dhcpcd <l;defunct<
arba
ps ef
Pas mane niekaip nemiršta dhcpcd
procesas, kurio ID 17607
. Kad išsiaiškinti zombio gimdytoją, pirmiausia žiūriu į PPID
(Parent Process ID) ir tada ieškau procesu su šiuo ID:
$ ps -el | grep 1671
Dabar panaikinsime zombinį procesą. Pvz. zombis procesas kurio PID 4104, įvykdome komandą:
# kill -9 4104
Atkreipiame dėmesį, kad ne visada gali pavykti panakinti zombį procesą, gali padėti susijusių servisų restartavimas.
Kaip automatizuotai panaikinti zombinius procesus
Tai padės atlikti ši komandinė eilutė:
kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`
Arba killzombi sh skriptas (skripto informacijos šaltinis).
Pabaigai
Kad nužudyti zombį linukse, žudyti reikia ne patį zombį bet jo gimdytoją! Bet ne viskas taip paprasta, jei zombio gimdytojas yra init procesas (PID numeris 1), tai nužudę jį galime užmušti visą linuksą.
Tai ką daryti? Ogi nieko. Linuksiniai zombiai smegenų nevalgo ─ nenaudoja atminties ir nerija procesoriaus resursų. Viskas ką jie daro, tai užima papildomą eilutę procesų sąraše, nieko daugiau.