По крайней мере в Linux сами обработчики сигналов наследуются, но не ожидающие сигналы.
Цитирование man-страницы Linux fork(2)
:
fork() создает дочерний процесс, который отличается от родительского процесса только своими PID и PPID и тем фактом, что использование ресурсов установлено на 0. Блокировки файлов и ожидающие сигналы не наследуются.
Этоимеет смысл, поскольку сигналы принадлежат (родительскому) процессу.Вновь созданный процесс (в основном) является копией текущего процесса, поэтому обработчики сигналов сохраняются.
Хотя это и не связано напрямую, вызов типа exec()
, который часто следует за fork()
, будет уничтожить все обработчики сигналов, так как в процесс загружается новый исполняемый файл (перезаписывая функции, обслуживающие в настоящее время сигналы).