выполнение подпрограммы перед выходом (сабж)

Модератор: Модераторы разделов

Аватара пользователя
Ardzhan
Сообщения: 57
ОС: Debian + WinXP на виртуалке

выполнение подпрограммы перед выходом

Сообщение Ardzhan »

Вообщем то возникла следующая задача.
Пишу сейчас демона под лиинукс на с.
Хотелось бы сделать, чтоб перед уничтоженем процесса выполнялось некоторые дествие, а потом он только закрывался, независимо делаю ли я kill, перестартовываю систему или выполняю инит скрипт с параметром stop. В какую сторону копать? Сигналы?
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: выполнение подпрограммы перед выходом

Сообщение powerfox »

На сколько я знаю, можно использовать сингалы, т.е. при получении сигнала программа закрывает себя, правда sigkill может и не дать такого шанса. Ещё можете посмотреть ф-ию atexit() из stdlib.h - она позволяет выбрать ф-ии, выполняемые перед exit(). Читайте документацию, по тому, что делают сигналы(например, sigkill).
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: выполнение подпрограммы перед выходом

Сообщение serzh-z »

Ardzhan писал(а):
07.03.2006 15:25
В какую сторону копать?


Думаю, что нужен процесс-надсмотрщик, который отреагирует на гибель подопечного и выполнит какие-то
действия. Это что касается SIGKILL (т.к. перехватить или игнорировать его не может ни одно приложение - это единственный подобный сигнал).

А всё остальное - демону просто достаточно обрабатывать SIGQUIT. Как я понимаю - подобный механизм реализован в Apache.
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: выполнение подпрограммы перед выходом

Сообщение flook »

serzh-z писал(а):
07.03.2006 16:28
SIGKILL (т.к. перехватить или игнорировать его не может ни одно приложение - это единственный подобный сигнал).

SIGSTOP
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: выполнение подпрограммы перед выходом

Сообщение t.t »

flook писал(а):
07.03.2006 18:35
serzh-z писал(а):
07.03.2006 16:28
SIGKILL (т.к. перехватить или игнорировать его не может ни одно приложение - это единственный подобный сигнал).
SIGSTOP
В смысле? Тоже неперехватываемый? А я помню, во многих доках читал именно что _только_ SIGKILL нельзя обработать. Выходит, доки врут? Или я что-то не так понял?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: выполнение подпрограммы перед выходом

Сообщение flook »

t.t писал(а):
09.03.2006 15:20
flook писал(а):
07.03.2006 18:35

SIGSTOP

В смысле? Тоже неперехватываемый? А я помню, во многих доках читал именно что _только_ SIGKILL нельзя обработать. Выходит, доки врут? Или я что-то не так понял?

Именно. Доки часто врут. SIGSTOP тоже неперехватываемый :P
Могу даже место в ядре показать где его запрещают перехватывать :ph34r:
Вернут EINVAL :rolleyes:
Если глибцы не нахимичат <_<

А вот SIGCONT перехватить можно, а игнорить - хрен :) Все равно разбудят.
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: выполнение подпрограммы перед выходом

Сообщение t.t »

(flook @ Mar 9 2006, в 15:48) писал(а):Именно. Доки часто врут. SIGSTOP тоже неперехватываемый
Могу даже место в ядре показать где его запрещают перехватывать
Вернут EINVAL
Спасибо за просвещение. Место показывать не надо; если время будет, лучше за свой опус вновь возьмитесь.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: выполнение подпрограммы перед выходом

Сообщение flook »

t.t писал(а):
10.03.2006 17:59
(flook @ Mar 9 2006, в 15:48) писал(а):Именно. Доки часто врут. SIGSTOP тоже неперехватываемый
Могу даже место в ядре показать где его запрещают перехватывать
Вернут EINVAL
Спасибо за просвещение. Место показывать не надо; если время будет, лучше за свой опус вновь возьмитесь.

Ну дык уже еще один раз взялся - про процессы наваял :) Уже два опуса...
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: выполнение подпрограммы перед выходом

Сообщение d_Sun »

flook писал(а):
09.03.2006 15:48
Именно. Доки часто врут. SIGSTOP тоже неперехватываемый :P
Могу даже место в ядре показать где его запрещают перехватывать :ph34r:


Не встречал ни одной доки, где бы говорилось, что SIGSTOP перехватываемый... :) Что-то не то читал? :D
Моя подпись сильно длинная :)
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: выполнение подпрограммы перед выходом

Сообщение flook »

d_Sun писал(а):
13.03.2006 12:10
flook писал(а):
09.03.2006 15:48

Именно. Доки часто врут. SIGSTOP тоже неперехватываемый :P
Могу даже место в ядре показать где его запрещают перехватывать :ph34r:


Не встречал ни одной доки, где бы говорилось, что SIGSTOP перехватываемый... :) Что-то не то читал? :D

Ну... Трудно сказать то или нет - попробуйте перехватить :)
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: выполнение подпрограммы перед выходом

Сообщение d_Sun »

flook писал(а):
13.03.2006 12:46
Ну... Трудно сказать то или нет - попробуйте перехватить :)


Кхм... Внимательнее прочитайте мой пост :) Я ж писал, что не видел ни где, что его _МОЖНО_ перехватывать!
Моя подпись сильно длинная :)
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: выполнение подпрограммы перед выходом

Сообщение flook »

d_Sun писал(а):
13.03.2006 13:21
flook писал(а):
13.03.2006 12:46

Ну... Трудно сказать то или нет - попробуйте перехватить :)


Кхм... Внимательнее прочитайте мой пост :) Я ж писал, что не видел ни где, что его _МОЖНО_ перехватывать!

Аа... :unsure:
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: выполнение подпрограммы перед выходом

Сообщение t.t »

(d_Sun @ Mar 13 2006, в 12:10) писал(а):Не встречал ни одной доки, где бы говорилось, что SIGSTOP перехватываемый... Что-то не то читал?
А я и не говорил, что где-то явно такое писали. А вот фраза типа "SIGKILL нельзя перехватить или обработать, в отличие от всех остальных сигналов" встречается нередко.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: выполнение подпрограммы перед выходом

Сообщение Jan2ary »

Совершенно случайно наткнулся, везет же :)
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

Ну это я так, вдогонку ;)
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали: