Это одно из мест, где Unix падает - у него действительно должно быть представление о дескрипторе файла для процесса, который можно передать в select
(что в Unix эквивалентно WaitForMultipleObjects
); но это не так.
Вместо этого вы устанавливаете обработчик для SIGCHLD
. В этом обработчике вы вызываете wait4
или waitpid
(в зависимости от того, что удобнее; но не пытайтесь использовать обычный wait
, вам нужен параметр options) в цикле, устанавливая флаг WNOHANG
до возвращает 0. Для каждого дочернего элемента упакуйте его PID и выйдите из состояния в структуру и запишите эту структуру в канал. Прочитайте из этого канала в вашем основном цикле событий, вытащите структуры и примите соответствующие меры. НЕ ПЫТАЙТЕСЬ возродить потомков (или выделить память, или сделать что-нибудь , кроме вызовов waitpid
и write
) из обработчика сигнала, если только вашей программе больше нечего делать и "основной цикл" состоит вызова sigsuspend
в бесконечном цикле.