ラベル シグナルハンドラ の投稿を表示しています。 すべての投稿を表示
ラベル シグナルハンドラ の投稿を表示しています。 すべての投稿を表示

2013年11月13日水曜日

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

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

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

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

2011年9月4日日曜日

TCP/IP を利用したソケット通信によるサーバー/クライアント通信

TCP/IP を利用したソケット通信によるサーバー/クライアント通信例です。

以下の例では、クライアントから送られたメッセージをそのまま送り返す echo 機能を持ったサーバと、そのサーバと通信を行うためのクライアントの実装を行っています。


ソース等をまとめたもの:DL(tcpsvcl.zip)

サーバー クライアント

TCP ライブラリ: tcp_lib.cpp TCP ライブラリ: tcp_lib.h

実行結果(サーバー側) 実行結果(クライアント側)

2011年9月2日金曜日

マイクロ sec 単位のスリープ関数の実装

シグナルハンドラとインターバルタイマによるマイクロ sec 単位のスリープ関数の実装例です。

例題では、インターバルタイマから SIGALRM のシグナルが通知されると mysleep() 関数内の mywait() 関数を実行するようにシグナルハンドラの設定を行っていますが、mywait() 関数は何の処理も行わない待機用の関数です。

実行結果

2011年3月19日土曜日

タイムアウト機能付のコンソール入力

タイムアウト機能付のコンソール入力例です。

シグナルハンドラとインターバルタイマによる sleep 関数の例を利用し、時間内に入力が得られなければタイムアウトします。

実行結果