Итак, у меня есть интересная проблема дизайна. Я работаю над SLES 9+ Linux, ядром 2.6+, и у меня есть многопоточное приложение, выступающее в качестве клиента RPC. Идея состоит в том, чтобы иметь несколько потоков для обработки запросов; один из таких запросов - запустить «задание» в качестве дочернего процесса.
Теперь проблема, с которой я столкнулся, состоит в том, чтобы настроить надлежащий обработчик сигналов для работы с различными сигналами.Я создал еще один поток для обработки сигналов, находящийся в состоянии sigwait ()
, при этом блокируя все соответствующие сигналы в других потоках. Идея состоит в том, что все сигналы для процесса должны быть доставлены в поток обработки сигналов, а остальные потоки должны беспокоиться только об обработке запросов по мере их поступления.
Все это отлично работает, за исключением тех гнилых потомков, которые всегда бросают их фрисби у меня на заднем дворе и топчут всю мою лужайку ... но если серьезно, мой поток обработки сигналов не получает сигнал SIGCHLD. Мое лучшее предположение относительно того, что здесь происходит, заключается в том, что, поскольку поток обработки сигналов не является потоком, породившим дочерний элемент, это будет не поток, который получает SIGCHLD, а вместо этого мои рабочие потоки, которые это сделали.
Итак, что касается моих вопросов:
Согласно запросу Дэвида Шварца SLES9: NPTL 2.3.5, SLES10: NPTL2.4