Mikä on zombie-prosessi:
Se on prosessi, joka päättyi, mutta kaikkea sitä ei poisteta välittömästi muistista, koska sen prosessikuvaaja pysyy muistissa.
Mikä pitäisi olla prosessin normaali käyttäytyminen:
Kun prosessi päättyy, prosessin tilaksi tulee
EXIT_ZOMBIE
ja prosessin vanhemmalle ilmoitetaan, että sen lapsiprosessi on kuollut
SIGCHLD
signaali.
Pääprosessin on sitten suoritettava
wait()
järjestelmäkutsu lukee kuolleen prosessin poistumistilan ja muita tietoja. Jälkeen
wait()
kutsutaan, zombie-prosessi poistetaan muistista. Tämä tapahtuu nopeasti, joten et näe zombie-prosessien kertymistä järjestelmääsi. Mutta tapauksissa, joissa näemme useita zombie-prosesseja kertyvän, tämä on tilanne, jossa ohjelmakoodi ei ole tehokas.
Kuinka löytää zombie-prosessit:
Komennon suorittaminen
top
Komennon suorittaminen
ps -ef | grep defunct
Kuinka lopettaa kertyvät zombiprosessit:
Suurimman osan ajasta zombie-prosesseilla on sama pääprosessitunnus.
Prosessi voidaan poistaa kahdella tavalla:
- Lähetä
SIGCHLD
signaali vanhemmalle prosessille.
Tämä signaali käskee emoprosessia suorittamaan wait()
System Call ja siivoa sen zombilapset:
kill -s SIGCHLD <PPID>
Esimerkki:
kill -s SIGCHLD 2201
- Tapa zombie-vanhemman prosessi
kill -9 <PPID>
Esimerkki:
kill -9 2201