LINUX.ORG.RU

История изменений

Исправление vodz, (текущая версия) :

Вроде работает, но почему trap не работает с kill pid всё равно интересно.

Потому, что при вызове внешней программы (sleep) обработчики сигналов самого shell-а устанавливаются в принятые для shell-ов по умолчанию. Причём, «для shell-ов» — это важно. Ибо общепринято по TERM/INT убиваться всем процессам по умолчанию, но оставаться живым shell-ам. Если вы замените sleep на что-то встроенное, скажем на while true;, то тогда сигнал обработается уже trap-ом, так как вы его настроили и не вызвали внешнюю прогу. kill же, как встроенная программа в shell по имени задачи посылает сигнал процессу как родоначальнику группе процессов, потому система посылает его всем процессам, родоначальник которого есть указанный. То есть это аналогично вызову kill -SIGINT -pid

Исправление vodz, :

Вроде работает, но почему trap не работает с kill pid всё равно интересно.

Потому что при вызове внешней программы (sleep) обработчики сигналов самого shell-а устанавливаются в принятые для shell-ов по умолчанию. Причём, «для shell-ов» — это важно. Ибо общепринято по TERM/INT убиваться всем процессам по умолчанию, но оставаться живым shell-ам. Если вы замените sleep на что-то встроенное, скажем на while true;, то тогда сигнал обработается уже trap-ом, так как вы его настроили и не вызвали внешнюю прогу. kill же, как встроенная программа в shell по имени задачи посылает сигнал процессу как родоначальнигу группе процессов, потому система посылает его всем процессам, родоночальник которого есть указанный. То есть это аналогично вызову kill -SIGINT -pid

Исправление vodz, :

Вроде работает, но почему trap не работает с kill pid всё равно интересно.

Потому что при вызове внешней программы (sleep) обработчики сигналов самого shell-а устанавливаются в принятые для shell-ов по умолчанию. Причём, «для shell-ов» — это важно. Ибо общепринято по TERM/INT убиваться всем процессам по умолчанию, но оставаться живым shell-ам. Если вы замените sleep на что-то встроенное, скажем на while true;, то тогда сигнал обработается уже trap-ом, так как вы его настроили и не вызвали внешнюю прогу. kill же, как встроенная программа в shell по имени задачи посылает сигнал процессу как родоначальнигу группе процессов, потому система посылает его всем процессам, родоночальник которого есть указанный. То есть это аналогично вызову kill _SIGINT -pid

Исходная версия vodz, :

Вроде работает, но почему trap не работает с kill pid всё равно интересно.

Потому что при вызове внешней программы (sleep) обработчики сигналов самого shell-а устанавливаются в принятые для shell-ов по умолчанию. Причём, «для shell-ов» — это важно. Ибо общепринято по TERM/INT убиваться всем процессам по умолчанию, но оставаться живым shell-ам. Если вы замените sleep на что-то встроенное, скажем на while true;, то тогда сигнал обработается уже trap-ом, так как вы его настроили и не вызвали внешнюю прогу. kill же, как встроенная программа в shell по имени задачи посылает сигнал процессу как родоначальнигу группе процессов, потому система посылает его всем процессам, родоночальник которого есть указанный.