Родительский процесс не перехватывает все его дочерние процессы - PullRequest
3 голосов
/ 18 ноября 2010

У меня следующая проблема:

У меня есть основной (родительский) процесс, который создает другие процессы (дочерние процессы) с помощью функции fork.Я ловлю статус ребенка, чтобы уничтожить зомби.Когда есть 1 дочерний процесс, он корректно перехватывается, но когда родительским процессом создано больше процессов (приблизительно 30), существует aprx.Осталось 4 зомби = родитель не поймает всех детей (возвращение статуса / состояния = ).

Для отслеживания статуса ребенка используется

void selfkill(int status) {
    wait(&status);
}

signal(SIGCHLD, selfkill);

Заранее спасибо.

1 Ответ

4 голосов
/ 18 ноября 2010

Вам, вероятно, следует использовать waitpid() с WNOHANG в цикле внутри обработчика сигнала.

Вероятно, случается, что не все сигналы доставляются - потому что некоторые из них поступают слишкомблизко друг к другу.Возможно, вы могли бы решить эту проблему, используя sigaction() вместо signal().

...