Date: Tue, 10 Dec 2002 21:43:52 +0500
From: Valentin Nechayev <netch@segfault.kiev.ua>
Newsgroups: ftn.ru.unix.prog
Subject: Обработка сигнала SIGCHLD для предотвражения зомби
AM> обработчик SIGCHLD простейший:
AM> void reap_child(int signum){
AM> pid_t pid;
AM> int wait_status;
AM> if ((pid = waitpid (-1, &wait_status, WNOHANG)) > 0) {
AM> it's ok
AM> } else {
AM> суета вокруг Wмакросов;
AM> }
Вот здесь - ставить while((pid=waitpid(...))>0) { ... }
AM> signal(signum, reap_child);
AM> }
AM> И всеравно остаются зомбики.. Чего я делаю нетак ?
Hе учитываешь, что на два и более умерших потомка может обработчик сигнала
вызваться только один раз. Асинхронные не-realtime сигналы доставляются
только один раз независимо от того, сколько раз его послали. (Разумеется,
до вызова обработчика. После этого они снова доставляются;))