The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Передача всех сигналов от родителя к ребенку."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Передача всех сигналов от родителя к ребенку."  
Сообщение от Дмитрий Котеров email on 14-Янв-07, 18:34 
Имеется процесс, который работает следующим образом.

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

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

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


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

2. "Передача всех сигналов от родителя к ребенку."  
Сообщение от NuINu (??) on 15-Янв-07, 12:44 

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру