如何运行进程并在运行时向其发送信号?

如何运行进程并在运行时向其发送信号?

我需要运行一个程序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,因此脚本无论如何都会退出)。

相关内容