Представьте, что у меня есть процесс, который начинает несколько дочерних процессов. Родитель должен знать, когда ребенок уходит. Поток, который заблокирован в waitpid , чтобы изящно выйти и присоединиться к нему. Приятно, что вещи убирают сами, но это может быть не так уж и важно. А затем поспите в течение какого -то произвольного времени, чтобы предотвратить напряженное ожидание. Однако тогда я могу только знать, когда ребенок выходил время от времени. В моем случае не может быть очень критическим, что я знаю, когда ребенок сразу же уходит, но я хотел бы знать как можно скорее ... < /p>
Я могу использовать сигнал Обработчик для Sigchld , и в обработчике сигнала делайте все, что я собирался делать, когда ребенок выходит, или отправьте сообщение в другой поток, чтобы сделать какое -то действие. Но использование обработчика сигнала немного запутывает поток кода. 5 сек. Поскольку выход процесса не является критической работой, я могу лениво сигнализировать поток в выход, при этом все еще заблокировав его в waitpid в остальное время, всегда готовое к реагированию. Есть ли такой вызов в Linux? Из альтернатив, какой из них лучше?
Другой метод, основанный на ответах, - это заблокировать sigchld во всех потоках с помощью pthread \ _sigmask () . Затем в одном потоке продолжайте звонить sigtimedwait () , ища sigchld . Это означает, что я могу провести время на этом вызове и проверить, должен ли поток выйти, а если нет, оставаться заблокированным в ожидании сигнала. После того, как Sigchld будет доставлен в этот поток, мы можем немедленно отреагировать на него и в строке потока ожидания, не используя обработчик сигнала.
Подробнее здесь: https://stackoverflow.com/questions/282 ... th-timeout