Middle+
Mis on zombi-protsessid Linuxis? Milliseid signaale tuleb saata nende lõpetamiseks?
sobes.tech AI
Vastus AI-lt
Linux-zombi protsessid on protsessid, mis on lõpetanud, kuid nende vanemprotsess pole veel lugenud nende lõpetamise staatust süsteemikutsumise wait() kaudu. Nad jäävad protsesside tabelisse, hõivates kirje, kuid ei tarbi CPU või mälu.
Nende õige lõpetamiseks peab vanemprotsess kutsuma välja wait() või waitpid(). Kui seda ei tehta, jäävad zombid püsima.
Signaalid ei eemalda otseselt zombi, kuid seda saab teha:
- Saata
SIGCHLDsignaali vanemale, et ta teaks lapse lõpetamisest ja kutsuks väljawait(). - Kui vanem ei vasta, saab selle lõpetada (näiteks
SIGTERMvõiSIGKILL), siis muutub init-protsess (PID 1) uueks vanemaks ja kutsub ise väljawait(), eemaldades zombid.
Go näide laste protsesside haldamiseks:
cmd := exec.Command("somecommand")
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
err = cmd.Wait() // oluline, et vältida zombie
if err != nil {
log.Println("Protsess lõppes veaga:", err)
}