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