Я запускаю программу, которая вызывает сценарий оболочки (для обсуждения sh1 с pid 100). Этот сценарий, в свою очередь, вызывает другой сценарий (для обсуждения sh2 с pid 101) и ожидает его завершения. sh2 (дочерний скрипт) занимает около 50 секунд.
То, как я вызываю sh2 (/bin/sh2.sh)
Во время ожидания завершения дочернего процесса я пытаюсь завершить sh1 (используя kill -15 100). У меня есть функция обработчика в sh1 для обработки этого сигнала. Однако я замечаю, что мой sh1 (родительский скрипт) не завершается до тех пор, пока дочерний процесс не завершит свою работу (в течение 50 секунд), и только после этого этот сигнал обрабатывается.
Я изменил свой дочерний скрипт, чтобы он завершился за 30 секунд, и я заметил, что после выдачи SIGTERM на sh1 для завершения требуется около 30 секунд.
Это поведение при обработке SIGTERM? то есть оставаться заблокированным дочерним процессом? и только потом обрабатывать сигнал. Разве процесс не прерывается для обработки сигнала?
SIGNAL Обработка в родительском скрипте.
function clean_up()
{
//Do the cleanup
}
trap "clean_up $$; exit 0" TERM
sh2
, когда вы сигнализируете родителю? - person Etan Reisner   schedule 21.10.2015