2013年11月13日水曜日

シグナルハンドラによるプロセス終了時の処理

シグナルハンドラを設定することにより、アプリに対して SIGINT/SIGHUP/SIGTERM(キーボードからの割り込み/端末との切断/終了)などのプロセス終了のシグナルが送られた際、そのままアプリを終了するのではなく、終了前の片付け処理などを行うことができます。

普通にアプリを書いていれば何らかの判定処理によって終了を行うと思いますが、デーモン用のプロセスとして処理を記述する場合などでは、kill コマンドからプロセス終了が行われるためこのような処理が必要になる場合があります。

例題では、シグナルを受け取った後メッセージを表示し(daemon stopped.)、アプリを終了させています。
コマンドラインからは kill コマンドを送っていますが、この時点ではアプリは終了せず、アプリ内で明示的にアプリを終了しない限りはアプリは継続して動作します。
一方、kill -KILL にてアプリを強制終了させた場合にはシグナルの通知に関係なくアプリが終了されます。 実行結果

0 件のコメント:

コメントを投稿