Command-Line
如何執行程序並在其執行時向其發送信號?
我需要執行一個程序 xyz。它在幾秒鐘內完成執行。它有一些我需要測試的信號處理。我如何從 shell 或 bash 腳本執行程序,並在執行時向它發送一個信號,如
kill -14
.目前,我正在嘗試的命令是
/usr/local/xyz input > some_file 2>&1 & PIDOS=$! && kill -14 $PIDOS
似乎不會觸發信號處理。
該命令看起來不錯。儘管當我嘗試這樣做時,該命令似乎太快了。就好像我的測試腳本在被拍攝之前沒有時間安裝信號處理程序。
一個測試腳本:
$ 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
,所以腳本還是退出了)。