The OpenNET Project / Index page

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

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

"Не доходят сигналы после выполнения system"  
Сообщение от max26 (ok) on 20-Янв-09, 11:00 
Есть демон, делаю систему обновления. После того как бинарник залит демон должен перезапустить себя. Посылаем сигнал терм kill(pid,SIGTERM), в обработчике делаем

void sighandler_terminate(int s) {
....
system(path_to_demon);
exit(0);
}

все замечательно, демон перезапускается, нормально работает за один исключением - он перестает принимать сигналы. Посылаем сигнал из консоли killall demonname и облом. Понятное дело killall -9 demonname работает. Что делать? Где пропадают сигналы?

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

 Оглавление

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


1. "Не доходят сигналы после выполнения system"  
Сообщение от mikra on 20-Янв-09, 11:18 
>[оверквотинг удален]
>
>void sighandler_terminate(int s) {
>....
>system(path_to_demon);
>exit(0);
>}
>
>все замечательно, демон перезапускается, нормально работает за один исключением - он перестает
>принимать сигналы. Посылаем сигнал из консоли killall demonname и облом. Понятное
>дело killall -9 demonname работает. Что делать? Где пропадают сигналы?

Тоесть при живом демоне стартует второй, а пока он запускается первый умирает? Мило. А если изменить производительность хоста, будет работать?

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

2. "Не доходят сигналы после выполнения system"  
Сообщение от max26 (ok) on 20-Янв-09, 11:28 

>Тоесть при живом демоне стартует второй, а пока он запускается первый умирает?
>Мило. А если изменить производительность хоста, будет работать?

Команда system ожидает завершения процесса. Значит второй в любом случае успеет стартовать. Или я не о том?

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

3. "Не доходят сигналы после выполнения system"  
Сообщение от mikra on 20-Янв-09, 11:38 
>
>>Тоесть при живом демоне стартует второй, а пока он запускается первый умирает?
>>Мило. А если изменить производительность хоста, будет работать?
>
>Команда system ожидает завершения процесса. Значит второй в любом случае успеет стартовать.
>Или я не о том?

Не о том. Предлагаю поставить опыт. В начале кода сделай слип секунд 10. Тоесть при старте демона первое что он делает - не перехват сигналов, не чтение конфигов или инициализация переменных, а слип. А потом посмотрим как все будет работать. Может я и ошибаюсь, но вдруг в  алгоритме возникают накладки из-за одновременной работы двух процессов?

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

4. "Не доходят сигналы после выполнения system"  
Сообщение от vic (??) on 20-Янв-09, 13:45 
>void sighandler_terminate(int s) {
>....
>system(path_to_demon);
>exit(0);
>}

аццкая жесть.
читать man signal
читать концепцию сигналов Posix тут хотя бы http://www.unix.org/single_unix_specification/

в обработчике сигнала _нельзя_ вызывать system(неявно fork) и exit().

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

6. "Не доходят сигналы после выполнения system"  
Сообщение от const86 (ok) on 21-Янв-09, 14:48 
>в обработчике сигнала _нельзя_ вызывать system(неявно fork) и exit().

А вот мне man 7 signal говорит, ссылаясь на posix, что fork и _exit можно. Другое дело. что здесь форк не нужен, а system его делает.

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

7. "Не доходят сигналы после выполнения system"  
Сообщение от vic (??) on 21-Янв-09, 15:51 
>>в обработчике сигнала _нельзя_ вызывать system(неявно fork) и exit().
>
>А вот мне man 7 signal говорит, ссылаясь на posix, что fork
>и _exit можно. Другое дело. что здесь форк не нужен, а
>system его делает.

да верно, однако exit() и _exit() это не одно и тоже.
system() нельзя, а сам fork() явно можно.
В неявном виде (в system()) могут производится какие-то unsafe действия.

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

8. "Не доходят сигналы после выполнения system"  
Сообщение от const86 (ok) on 21-Янв-09, 16:43 
Теперь согласен :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Не доходят сигналы после выполнения system"  
Сообщение от const86 (ok) on 21-Янв-09, 14:46 
>system(path_to_demon);

exec

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

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

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




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

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