我需要运行一个程序xyz。它在几秒钟内完成执行。它有一些我需要测试的信号处理。从 shell 或 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
,因此脚本无论如何都会退出)。