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

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

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スクリプトはとにかく終了します。)

おすすめ記事