Вообщем то возникла следующая задача.
Пишу сейчас демона под лиинукс на с.
Хотелось бы сделать, чтоб перед уничтоженем процесса выполнялось некоторые дествие, а потом он только закрывался, независимо делаю ли я kill, перестартовываю систему или выполняю инит скрипт с параметром stop. В какую сторону копать? Сигналы?
выполнение подпрограммы перед выходом (сабж)
Модератор: Модераторы разделов
-
Ardzhan
- Сообщения: 57
- ОС: Debian + WinXP на виртуалке
-
powerfox
- Сообщения: 458
Re: выполнение подпрограммы перед выходом
На сколько я знаю, можно использовать сингалы, т.е. при получении сигнала программа закрывает себя, правда sigkill может и не дать такого шанса. Ещё можете посмотреть ф-ию atexit() из stdlib.h - она позволяет выбрать ф-ии, выполняемые перед exit(). Читайте документацию, по тому, что делают сигналы(например, sigkill).
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: выполнение подпрограммы перед выходом
Думаю, что нужен процесс-надсмотрщик, который отреагирует на гибель подопечного и выполнит какие-то
действия. Это что касается SIGKILL (т.к. перехватить или игнорировать его не может ни одно приложение - это единственный подобный сигнал).
А всё остальное - демону просто достаточно обрабатывать SIGQUIT. Как я понимаю - подобный механизм реализован в Apache.
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: выполнение подпрограммы перед выходом
SIGSTOP
В каждом из нас спит гений... и с каждым днем все крепче...
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: выполнение подпрограммы перед выходом
В смысле? Тоже неперехватываемый? А я помню, во многих доках читал именно что _только_ SIGKILL нельзя обработать. Выходит, доки врут? Или я что-то не так понял?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: выполнение подпрограммы перед выходом
Именно. Доки часто врут. SIGSTOP тоже неперехватываемый :P
Могу даже место в ядре показать где его запрещают перехватывать
Вернут EINVAL
Если глибцы не нахимичат <_<
А вот SIGCONT перехватить можно, а игнорить - хрен
В каждом из нас спит гений... и с каждым днем все крепче...
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: выполнение подпрограммы перед выходом
Спасибо за просвещение. Место показывать не надо; если время будет, лучше за свой опус вновь возьмитесь.(flook @ Mar 9 2006, в 15:48) писал(а):Именно. Доки часто врут. SIGSTOP тоже неперехватываемый
Могу даже место в ядре показать где его запрещают перехватывать
Вернут EINVAL
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: выполнение подпрограммы перед выходом
t.t писал(а): ↑10.03.2006 17:59Спасибо за просвещение. Место показывать не надо; если время будет, лучше за свой опус вновь возьмитесь.(flook @ Mar 9 2006, в 15:48) писал(а):Именно. Доки часто врут. SIGSTOP тоже неперехватываемый
Могу даже место в ядре показать где его запрещают перехватывать
Вернут EINVAL
Ну дык уже еще один раз взялся - про процессы наваял
В каждом из нас спит гений... и с каждым днем все крепче...
-
d_Sun
- Сообщения: 291
Re: выполнение подпрограммы перед выходом
Не встречал ни одной доки, где бы говорилось, что SIGSTOP перехватываемый...
Моя подпись сильно длинная :)
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: выполнение подпрограммы перед выходом
Ну... Трудно сказать то или нет - попробуйте перехватить
В каждом из нас спит гений... и с каждым днем все крепче...
-
d_Sun
- Сообщения: 291
Re: выполнение подпрограммы перед выходом
Кхм... Внимательнее прочитайте мой пост
Моя подпись сильно длинная :)
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: выполнение подпрограммы перед выходом
Аа...
В каждом из нас спит гений... и с каждым днем все крепче...
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: выполнение подпрограммы перед выходом
А я и не говорил, что где-то явно такое писали. А вот фраза типа "SIGKILL нельзя перехватить или обработать, в отличие от всех остальных сигналов" встречается нередко.(d_Sun @ Mar 13 2006, в 12:10) писал(а):Не встречал ни одной доки, где бы говорилось, что SIGSTOP перехватываемый... Что-то не то читал?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Jan2ary
- Бывший модератор
- Сообщения: 630
- Статус: Тщедушный очкарик
Re: выполнение подпрограммы перед выходом
Совершенно случайно наткнулся, везет же 
Practical UNIX and Internet Security, Second Edition
By Simson Garfinkel, Gene Spafford
Second Edition April 1996
Ну это я так, вдогонку
Many signals, including SIGTERM, can be caught by programs. With a caught signal, a programmer has three choices of action:
- Ignore it.
- Perform the default action.
- Execute a program-specified function.
There are two signals that cannot be caught: signal 9 ( SIGKILL) and signal 17 ( SIGSTOP).
Practical UNIX and Internet Security, Second Edition
By Simson Garfinkel, Gene Spafford
Second Edition April 1996
Ну это я так, вдогонку
Не шалю, никого не трогаю, починяю примус...