Как запустить процесс и отправить ему СИГНАЛ во время его выполнения?

Как запустить процесс и отправить ему СИГНАЛ во время его выполнения?

Мне нужно запустить программу 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, поэтому скрипт все равно завершился).

Связанный контент