URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6076
[ Назад ]

Исходное сообщение
"Передача всех сигналов от родителя к ребенку."

Отправлено Дмитрий Котеров , 14-Янв-07 18:34 
Имеется процесс, который работает следующим образом.

1. Делает fork().
2. Ждет, пока ребенок завершится, и продолжает работу.

Проблема в следующем. Родительскому процессу время от времени могут приходить разнообразные сигналы (TERM, HUP, ALRM и т.д. - сколько угодно). Заранее знать, что это за сингалы, нельзя (они устанавливаются на другом слое абстракции). Нужно эти сигналы (все, сколько бы их ни было!) передавать ребенку, а самому - сидеть и ничего не делать, только ждать его окончания.

С другой стороны, при создания ребенка ему нужно установить все те же самые обработчики сигналов, что были у родителя до этого. (По умолчанию при вызове fork() все обработчики сигналов сбрасываются.)

Т.е. алгоритм - временно передать все полномочия ребенку, а когда тот завершится, продолжить работу.

Вопрос: существует ли какая-то готовая библиотека, поддерживающая похожую логику? Меня беспокоят больше всего баги, которых можно насажать десятками при "ручной" реализации.


Содержание

Сообщения в этом обсуждении
"Передача всех сигналов от родителя к ребенку."
Отправлено Andy , 15-Янв-07 12:13 
Насколько я знаю fork делает копию процесса, от родителя дочерний процесс отличается только PIDом, следовательно обработчики сигналов сохраняются в дочернем процессе. Для того что бы передать в дчерний процесс полученый сигнал, видимо можно сделать в обработчике сигнала kill на дочерний процесс поскольку PID дочернего процесса известен, или передать соответсвующую информацию на stdin в дочерний процесс, если есть возможность.

"Передача всех сигналов от родителя к ребенку."
Отправлено NuINu , 15-Янв-07 12:44 

>С другой стороны, при создания ребенка ему нужно установить все те же
>самые обработчики сигналов, что были у родителя до этого. (По умолчанию
>при вызове fork() все обработчики сигналов сбрасываются.)
обработчики сбрасываются при вызове exec.

Я вот только не понял, как ты оставишь обработчики теми же самыми, если в родительском процессе вся обработка сигналов будет сводиться в передаче их ребенку?