Sobes.tech
Middle+

Čo sú to zombie procesy v Linuxe? Aké signály je potrebné odoslať na ich ukončenie?

sobes.tech AI

Odpoveď od AI

Zombi procesy v Linuxe sú procesy, ktoré sa ukončili, ale ich rodičovský proces ešte neprečítal ich stav ukončenia pomocou systémového volania wait(). Zostávajú v tabuľke procesov, zaberajú záznam, ale nevyužívajú CPU alebo pamäť.

Na ich správne ukončenie musí rodičovský proces zavolať wait() alebo waitpid(). Ak to neurobí, zombi procesy pretrvávajú.

Signály priamo neodstraňujú zombie, ale je možné:

  • Poslať signál SIGCHLD rodičovi, aby sa dozvedel o ukončení dieťaťa a zavolal wait().
  • Ak rodič neodpovedá, môže byť ukončený (napríklad s SIGTERM alebo SIGKILL), a potom init proces (PID 1) sa stáva novým rodičom a sám zavolá wait(), čím zombie odstráni.

Príklad v Go na správu detských procesov:

cmd := exec.Command("somecommand")
err := cmd.Start()
if err != nil {
    log.Fatal(err)
}
err = cmd.Wait() // dôležité na zabránenie zombie
if err != nil {
    log.Println("Proces skončil s chybou:", err)
}