我需要運行一個程式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
,因此腳本無論如何都會退出)。