В Unix-подібних системах процес-зомбі (часто позначається, як defunct) — це процес, що завершив виконання, але все ще має запис в таблиці процесів. Цей запис потрібен, щоб батьківський процес міг прочитати код завершення. Термін процес-зомбі походить із загального визначення людини-зомбі. За цією метафорою процес-нащадок помер, але ще не був забраний смертю. На відміну від нормальних процесів, команда kill ніяк не впливає на процес-зомбі.
Коли процес завершується, вся пам’ять і пов’язані з ним ресурси звільняються для інших процесів, проте, запис процесу залишається в таблиці процесів. Батьківський процес може прочитати код завершення нащадка за допомогою системного виклику wait, після чого процес-зомбі буде прибрано зі списку процесів. Виклик wait може бути зроблено послідовно, але зазвичай його виконують в обробнику подій для сигналу SIGCHLD, який отримує батьківський процес, коли нащадок завершується.
Приклади Послідовне очікування процесу-нащадка в визначеному порядку може лишити зомбі довше ніж згаданий „короткий проміжок часу“. Це не обов’язково вада в програмі, а просто концепт програмування, що не часто зустрічається.
С #include <sys/wait.h> #include <stdlib.h> #include <unistd.h>
int main(void) { pid_t pids; int i;
for (i = 4; i >= 0; --i) { pids[i] = fork(); if (pids[i] == 0) { sleep(i+1); _exit(0);
for (i = 4; i >= 0; --i) waitpid(pids[i], NULL, 0);
}shell#!/bin/sh (echo bu VINRARUS & sleep 666)& echo Zombie is created only to 666 sec!
Посилання Zombie process usenet post UNIX FAQ Question 3.13: How do I get rid of zombie processes that persevere? Zombies(5) (from UNIX System Concepts man pages) How to kill defunct processes Killing Zombie processes automatically using cron.