プログラム 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
ため、スクリプトはとにかく終了しました)。