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
SIGCHLDrodičovi, aby sa dozvedel o ukončení dieťaťa a zavolalwait(). - Ak rodič neodpovedá, môže byť ukončený (napríklad s
SIGTERMaleboSIGKILL), 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)
}