На своїй веб-сторінці про трюк з самовідводу Дан Бернштейн пояснює стан перегонів select()
та сигналів, пропонує вирішення та робить висновок, що
Звичайно, правильною річчю було б
fork()
повернути дескриптор файлу, а не ідентифікатор процесу.
Що він має на увазі під цим - це щось про те, щоб дозволити select()
дочірнім процесам обробляти зміни свого стану, а не використовувати обробник сигналів, щоб отримувати повідомлення про ці зміни у стані?
signalfd
що такі речі були тоді?
wait()
, були речі, які ти не міг зробити, тому хтось вигадав SIGCHLD, але це була погана робота. З мого досвіду, і тепер, коли вони існують, посипаючи красиво, що блокує wait3()
, wait4()
і / або waitpid()
дзвінки в ключових місцях (можливо , ваш основний цикл подій) є набагато кращою альтернативою.