Sobes.tech
Back to questions
Middle+
1

Что такое зомби-процессы в Linux? Какие сигналы нужно посылать для их завершения?

Companies where asked
VKVK

Answer from AI

sobes.tech AI

Зомби-процессы в 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)
}