私はstdoutにテキストの行を単に出力する単純なPerlスクリプトを持っています。私が達成したいことは、このスクリプトが実行されている間に、私(または他の誰か)がそのプロセスに停止するシグナルを発行すると、そのシグナルをトラップして正常に終了させたいということです。私は実際には、コマンドラインからCtrl + Cキーを打ったとき、私はそれがちょうど死ぬPerlで信号をきれいにトラップする
kill -9 <pid>
を発行した場合、これは、うまく動作しますが、私が持っているコードは、次の
#!/usr/bin/perl -w
$| = 1;
use sigtrap 'handler' => \&sigtrap, 'HUP', 'INT','ABRT','QUIT','TERM';
while(1){
print "Working...\n";
sleep(2);
}
sub sigtrap(){
print "Caught a signal\n";
exit(1);
}
のように見えます。終了する前に何かを実行するにはどうすればよいですか?私の一般的な考え方は、このフレームワークを使用して、メンテナンスや障害のためにサーバーが再起動されたために、このスクリプトがサーバー上で終了したときをキャプチャすることです。
ありがとうございます。
'Ctrl-C'を押すと、インタラクティブプロセスの場合はデフォルトアクションですが、' INT'シグナル**は 'TERM'ではなく**送信されます。 'kill -9'とは異なり、どちらのシグナルも捕まえることができます。 'kill -l'はシグナル名をリストします。 'stty -a'は' INT'の 'Ctrl-C'へのデフォルトマッピングを表示します。 – JRFerguson
よろしく!それをクリアして誤解を招いて申し訳ありません。 –