Мне нужно запустить программу xyz. Она завершает выполнение через несколько секунд. В ней есть обработка сигналов, которую мне нужно протестировать. Из оболочки или скрипта bash как мне запустить программу и во время ее выполнения отправить ей сигнал типа kill -14
.
В настоящее время я пробую команду:
/usr/local/xyz input > some_file 2>&1 & PIDOS=$! && kill -14 $PIDOS
Похоже, что обработка сигнала не срабатывает.
решение1
Эта команда выглядит нормально. Хотя когда я попробовал, оказалось, что команда была слишком быстрой. Как будто мой тестовый скрипт не успел установить обработчик сигнала до того, как он был застрелен.
Тестовый сценарий:
$ echo '$SIG{USR1} = sub { print "GOT SIGNAL\n" }; sleep 100' > sigtest.pl
Снимайте его немедленно: (сон присутствует, поэтому следующая подсказка не печатается немедленно)
$ perl sigtest.pl & kill -USR1 $! ; sleep 1
[1] 8825
[1]+ User defined signal 1 perl sigtest.pl
Он ничего не напечатал, но умер от сигнала. Дадим ему немного времени:
perl sigtest.pl & ( sleep 0.5 ; kill -USR1 $! )
[1] 8827
GOT SIGNAL
[1]+ Done perl sigtest.pl
Теперь это сработало, обработчик сигнала сработал. (сигнал прервал sleep
, поэтому скрипт все равно завершился).