Ответ
Зомби-процесс (defunct) — это завершённый процесс, который остаётся в таблице процессов, пока родительский процесс не прочитает его статус через wait(). В Go это редко проблема, так как стандартная библиотека автоматически обрабатывает завершение дочерних процессов.
Пример:
package main
import (
"os/exec"
"time"
)
func main() {
cmd := exec.Command("sleep", "1")
cmd.Start() // Запускаем процесс без ожидания
// Если не вызвать cmd.Wait(), процесс станет зомби
time.Sleep(2 * time.Second)
}
Как избежать:
- Всегда вызывать
Wait()для запущенных процессов - Использовать
cmd.Run()вместоStart(), если не нужен асинхронный запуск - В сложных случаях можно использовать обработчики сигналов SIGCHLD