プロセスを実行し、その実行中にシグナルを送信するにはどうすればよいでしょうか?

プロセスを実行し、その実行中にシグナルを送信するにはどうすればよいでしょうか?

プログラム xyz を実行する必要があります。数秒で実行が完了します。テストする必要があるシグナル処理がいくつかあります。シェルまたは 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ため、スクリプトはとにかく終了しました)。

関連情報