На его веб - странице о с трюком собственной трубы , Dan Bernstein объясняет состояние гонки с select()и сигналами, предлагает обходной путь и приходит к выводу , что
Конечно, правильно было бы
fork()возвращать дескриптор файла, а не идентификатор процесса.
Что он подразумевает под этим - это что-то такое, что позволяет select()дочерним процессам обрабатывать изменения своего состояния вместо того, чтобы использовать обработчик сигнала для получения уведомлений об этих изменениях состояния?
signalfdи так было тогда?
wait(), были вещи, которые вы не могли сделать, поэтому кто-то изобрел SIGCHLD, но это была плохая работа. По моему опыту, и теперь, когда они существуют, посыпая красиво, блокирующая wait3(), wait4()и / или waitpid()звонки в ключевых местах (возможно , ваш основной цикл событий) является гораздо лучшей альтернативой.