Middle+
¿Qué son los procesos zombie en Linux? ¿Qué señales se deben enviar para terminarlos?
sobes.tech AI
Respuesta de la IA
Зомби-процессы в Linux — это процессы, которые завершились, но их родительский процесс ещё не прочитал их статус завершения через системный вызов wait(). Они остаются в таблице процессов, занимая запись, но не потребляют CPU или память.
Для их корректного завершения нужно, чтобы родительский процесс вызвал wait() или waitpid(). Если родитель не делает этого, зомби остаются.
Сигналы напрямую не убирают зомби, но можно:
- Отправить сигнал
SIGCHLDродителю, чтобы он узнал о завершении дочернего и вызвалwait(). - Если родитель не отвечает, можно завершить родителя (например,
SIGTERMилиSIGKILL), тогда init-процесс (PID 1) станет новым родителем и сам вызоветwait(), убирая зомби.
Пример на Go для обработки дочерних процессов:
cmd := exec.Command("somecommand")
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
err = cmd.Wait() // важно вызвать, чтобы не было зомби
if err != nil {
log.Println("Process finished with error:", err)
}