Имеется процесс, который работает следующим образом.1. Делает fork().
2. Ждет, пока ребенок завершится, и продолжает работу.Проблема в следующем. Родительскому процессу время от времени могут приходить разнообразные сигналы (TERM, HUP, ALRM и т.д. - сколько угодно). Заранее знать, что это за сингалы, нельзя (они устанавливаются на другом слое абстракции). Нужно эти сигналы (все, сколько бы их ни было!) передавать ребенку, а самому - сидеть и ничего не делать, только ждать его окончания.
С другой стороны, при создания ребенка ему нужно установить все те же самые обработчики сигналов, что были у родителя до этого. (По умолчанию при вызове fork() все обработчики сигналов сбрасываются.)
Т.е. алгоритм - временно передать все полномочия ребенку, а когда тот завершится, продолжить работу.
Вопрос: существует ли какая-то готовая библиотека, поддерживающая похожую логику? Меня беспокоят больше всего баги, которых можно насажать десятками при "ручной" реализации.
Насколько я знаю fork делает копию процесса, от родителя дочерний процесс отличается только PIDом, следовательно обработчики сигналов сохраняются в дочернем процессе. Для того что бы передать в дчерний процесс полученый сигнал, видимо можно сделать в обработчике сигнала kill на дочерний процесс поскольку PID дочернего процесса известен, или передать соответсвующую информацию на stdin в дочерний процесс, если есть возможность.
>С другой стороны, при создания ребенка ему нужно установить все те же
>самые обработчики сигналов, что были у родителя до этого. (По умолчанию
>при вызове fork() все обработчики сигналов сбрасываются.)
обработчики сбрасываются при вызове exec.Я вот только не понял, как ты оставишь обработчики теми же самыми, если в родительском процессе вся обработка сигналов будет сводиться в передаче их ребенку?