如何運行進程並在運行時向其發送信號?

如何運行進程並在運行時向其發送信號?

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

相關內容