А как сделать так, чтобы именно в случае тупняка скрипт себя завершал?
что значит «тупняк»?
exit 0
нет. Там запускается ещё один процесс, который сначала ждёт 60с, а потом посылает основному процессу SIGTERM=15. Потому основной процесс прерывается с кодом 128+15=143.
Если ты хочешь код 0(зачем?), то ты можешь свой обработчик сигналов сделать.
нет. kill ничего не выставляет, это вообще другой процесс. Все процессы по умолчанию прерываются с кодом 128+σ, где σ это код сигнала, который можно узнать командой kill -l.
Если ты будешь прерывать CTRL+C, код будет 130=128+2, а сигнал SIGINT.
Это принудительное завершение по истечению времени sleep как я понимаю? А как сделать так, чтобы именно в случае тупняка скрипт себя завершал?
Ты должен сам знать, в каком месте скрипта происходит зависание, и исполнять этот кусок в отдельном процессе. Основной процесс должен отслеживать выполнение кода в дочернем. И, например, по таймауту, убивать дочерний процесс.
Ты должен сам знать, в каком месте скрипта происходит зависание, и исполнять этот кусок в отдельном процессе. Основной процесс должен отслеживать выполнение кода в дочернем. И, например, по таймауту, убивать дочерний процесс.
Я примерно знаю что где это место. Это init.d скрипт corosync и он на команде stop иногда залипает, вот и родилась идея сделать ему принудительный таймаут.