シグナルとは何か
計算機の CPU はさまざまなハードウェアからの割り込み要求 (interrupt request) を非同期的に受け付ける。 シグナルとは,このような CPU へのハードウェア的な割り込み要求に似た仕組みを,オペレーティング・システムがソフトウェア的に実現したものである。 ハードウェアの割り込み要求が CPU へと送られるのと同じように,シグナルはプロセスへと送られる。
シグナルとは ・シグナルには特定の現象が発生した場合にOSが送信してくるものや,デーモンプロセスを制御するためにユーザが送信するものなど,さまざまなものが存在する ・主なシグナル SIGHUP 主に設定ファイルの再読み込みを要求するために使用 SIGINT 割り込みを要求(Ctrl-Cが押された場合など) SIGKILL プロセスを強制終了 SIGPIPE 閉じられたパイプやソケットに書き込もうとした SIGALRM alarmで設定した時間が経過 SIGTERM プロセスの終了を要請 SIGCHLD 子プロセスが終了 ・基本的には、シグナルを受け取るとプロセスは強制終了する ・対処法 ・シグナルを受け取った時の動作を強制終了以外の動作に設定する。 ・signal( SIGPIPE , SIG_IGN ); / シグナルを無視する / ・send時にオプションを指定することでSIGPIPEが発生しないようにする。 ・re = send( fd , buff ,buffsize , MSG_NOSIGNAL ); if( re == -1 ) { switch( errno ){ case EPIPE: / 送信先がcloseしていた為のエラー / break; } } ・シグナルは、システムが発生させるイベントの告知である。 ・サーバーがレスポンスを返す前にクライアントがソケットを閉じてしまうと、write( )がSIGPIPEシグナルを生成することがある。 ・SIGPIPEの既定の動作はプロセスの終了なので、この状況が発生しただけでサーバーは勝手に(coreを残さず)終了してしまいます。
デーモンプロセスとは ・一般にデーモンプロセスとは,一般的にはインタラクティブに処理を行わず, 時間やある一定のトリガーによって動作する常駐プロセスのことを指す ・特徴 ・システムの起動時に起動される ・システムが終了するときに終了する ・実行中はほとんどの時間をイベント待ちのままで過ごす ・実際の処理は,子プロセスを起動しそこで処理を行う ・例 ・ファイルシステム、メールの送受信、印刷、Webサーバなどの機能
・参考URL http://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html#lbAE http://gihyo.jp/dev/serial/01/perl-hackers-hub/000603 http://www.oki-osk.jp/esc/linux/signal.html