Sobes.tech
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 SIGCHLD signaali vanemale, et ta teaks lapse lõpetamisest ja kutsuks välja wait().
  • Kui vanem ei vasta, saab selle lõpetada (näiteks SIGTERM või SIGKILL), siis muutub init-protsess (PID 1) uueks vanemaks ja kutsub ise välja wait(), 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)
}