Что такое зомби-процесс

«Что такое зомби-процесс» — вопрос из категории Linux, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Зомби-процесс (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