ファイヤープロジェクト
シグナルを送信してみる
2003-07-20T15:13+09:00   matsu
受信の方法がわかったところで今度は送信してみる.シグナルの送信には,raiseとkillがある.raiseは自分自身にシグナルを送信する関数である.killはコマンドkillと同等の機能をもつ関数である.
自分自身にシグナルを送信するにはraise関数を使用する.以下サンプル.
raiseはシグナルの送信に成功すると0を,失敗すると0以外の値を返す.以下実行結果.
set signal handler.
raise SIGINT.
catched SIGINT.
raise SIGINT again.
自分以外のプロセスにシグナルを送信するには,kill関数を使用する.以下サンプル.
killは成功すると0を返し,失敗すると-1を返す.失敗したときはerrnoを設定する.また,パーミッションのないプロセスにシグナルを送ろうとしてみエラーを返す.また,pauseはシグナルを受信するまで一時停止する関数である.あと,サンプル作成時にシグナルハンドラの設定を忘れてハマったときに気づいたのだが,送信先がシグナルハンドラを設定していない場合はパーミッションがないことになるようだ.以下実行結果.
child is still alive.
child is still alive.
child is still alive.
child is still alive.
child is still alive.
kill me!
catched my child's request.
kill my child.
kill関数についての詳細は
man 2 kill
参照.
matsu(C)
Since 2002
Mail to matsu