При kill -s SIGINT 50138
вы только отправляете сигнал процессу оболочки, и нужно дождаться завершения sleep 1000
, потому что sleep
не получает сигнал.
Control-C, тем не менее, заставляет терминал отправлять SIGINT
каждому процессу в текущей группе процессов, поэтому оба сценария оболочки и sleep
получают его. Ваш сценарий по-прежнему не обрабатывает команду trap до тех пор, пока sleep
не завершится, но sleep
немедленно завершится в ответ на SIGINT
, который он только что получил от терминала.
Если ваш kill
поддерживает это,Вы также можете использовать kill -s SIGINT -50138
(обратите внимание на отрицательный идентификатор процесса), чтобы отправить SIGINT всей группе процессов.