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