Я действительно не уверен в требованиях POSIX к безопасности fork при наличии потоков и сигналов. fork указывается в качестве одной из функций безопасности, совместимых с асинхронным сигналом, но если есть вероятность, что в библиотечном коде зарегистрировались обработчики pthread_atfork, которые не являются безопасными по отношению к асинхронному сигналу, делает ли это отмену безопасности fork? Ответ зависит от того, может ли поток, в котором работает обработчик сигнала, находиться в середине использования ресурса, который требуется обработчикам atfork? Или сказать по-другому, если обработчики atfork используют ресурсы синхронизации (мьютексы и т.д.), Но fork вызывается из обработчика сигнала, который выполняется в потоке, который никогда не обращается к этим ресурсам, соответствует ли программа?
Основываясь на этом вопросе, если "потокобезопасное" forking реализовано внутренне в системной библиотеке с использованием идиом, предложенных pthread_atfork (получить все блокировки в обработчике предпродажа и освободить все блокировки как в обработчиках postfork родительского, так и дочернего), то fork когда-либо безопасно использовать из обработчиков сигналов в многопоточной программе? Разве не возможно, что поток, обрабатывающий сигнал, может находиться посреди вызова malloc или fopen/fclose и удерживания глобальной блокировки, что приводит к тупиковой ситуации во время fork?
Наконец, даже если fork безопасен в обработчиках сигналов, безопасно ли оно fork в обработчике сигнала, а затем возвращается из обработчика сигнала или вызов в fork в обработчике сигналов всегда требует последующий вызов _exit или одного из семейств функций exec до возврата обработчика сигнала?