Command-Line

如何執行程序並在其執行時向其發送信號?

  • September 28, 2016

我需要執行一個程序 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,所以腳本還是退出了)。

引用自:https://unix.stackexchange.com/questions/312797