1

クリーンアップを行うために をキャッチした後、 でプログラムを終了するよりもCtrlC、 でプログラムを終了する方が正しいですか?kill( 'INT', $$ )exit()

4

1 に答える 1

4

Ctrl-シグナルをプロセスにC送信INTします。INT役に立たない処理後に別の送信:

perl -E'$SIG{INT}=sub{say "interrupted"; $c++ < 5 and kill INT => $$}; <>'

これは珍しい実装方法です再帰^C ^C ^C後戻りしますが、プログラムを終了する量はありません。(Enter キーを押して終了します)。

プログラムを実行したい場合はexit、それを実行してください(できればゼロ以外のステータスで)。


からの関連する引用perlmod:

ENDコードブロックはできるだけ遅く実行されます。つまり、perl がプログラムの実行を終了した後、インタプリタが関数の結果として終了する場合でも、インタプリタが終了する直前に実行されますdie()。(ただし、 を介して別のプログラムにモーフィングしている場合execや、信号によって水から吹き飛ばされている場合はそうではありません。(可能であれば) 自分でトラップする必要があります)。

つまり、自己中断はデフォルトでブロックをkill INT => $$実行しません。ENDこれはおそらく、「難しいことを可能にする」という哲学から来ています。INT特定の終了操作の実行に非常に長い時間がかかる可能性がある場合を除き、これらの操作はまたはTERMシグナルに対して実行する必要があります。ユーザーがすぐにシャットダウンしたい場合でも、KILL.

于 2013-05-12T11:50:37.547 に答える