LINUX.ORG.RU

обработать сигнал в скрипте bash.


0

0

Есть бесконечный цикл в бэкграунде, в котором выполняется полезное дествие :-). Надо чтобы он при пришедшем сигнале, например TERM, скрипт мог что-то делать, например записывать в лог что-то. Проблема в том, что с инструкцией trap все работает замечательно, но только, если я посылаю сигнал из той же консоли, из которой я зупустил сам скрипт. Если с другой - скрипт ложит болт и работает дальше как ни в чем не бывало. Скрипт запускаю <имя_скрипта> &. Что я делаю не так?

anonymous
Ответ на: комментарий от cvv

Да вот именно, что тому. Может цикл как-то по другому надо делать?
У меня-то просто
while true
do
<бла-бла-бла>
done

anonymous
()
Ответ на: комментарий от anonymous

ну в любом случае этот твой скрипт -- не один процесс. Он порождает детей. у тебя там наверняка стоит sleep, и сигнал просто ждет пока sleep закончится.

dilmah ★★★★★
()
Ответ на: комментарий от cvv

для наглядности пошли -KILL и попробуй посмтореть какой процесс рухнет

cvv ★★★★★
()
Ответ на: комментарий от anonymous

вроде кошерное решение -- это использовать setsid

я обходился мелкими хаками. В случае со sleep, я спал не один раз на 1000 сек, а 1000 раз на 1 секунду.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

а что у него там за система что sleep сигналом не рвётся?

как будто во всех современных дистрах это давно полечено?

cvv ★★★★★
()
Ответ на: комментарий от dilmah

не только. от libc тоже.

в старых libc sleep() реализовывался через alarm()/sigalrm и поэтому сигналами не рвался: они маскировались.

в последних glibc sleep реализуется через nanosleep() и как следствие исчезавет эта проплема и потенциальные side effects

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.