「シグナル(割り込み)」の編集履歴(バックアップ)一覧はこちら
「シグナル(割り込み)」(2010/02/25 (木) 00:56:52) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
** シグナル処理プログラムの記述方法(全体の流れ)
+ 処理対象とするシグナル番号を選びます。
+ シグナル受信時の処理内容を、ユーザ定義関数として記述します。
-- ユーザ定義関数内では、第1引数がシグナル番号となります。
-- ユーザ定義関数内での、使用できる関数に制約はありません。
+ 定義したユーザ関数をシグナルハンドラとして設定します。
&br()
** シグナルモニタの例
> 受信したシグナル番号を表示する例です。このため、処理対象とするシグナル番号は、ユーザー側にてキャッチ可能な全てシグナル番号とします。なお、このプログラムは CTRL+C でも終了しなくなるため、CTRL+C 受信時には KILL -9 による終了方法を表示することとしました。
> なお、ここではシグナル待ち受け時間中は pause() 関数で待つこととしましたが、他の処理を実行させていても問題はありません。
# シグナルハンドラとなるユーザ定義関数を2つ定義します。
# その1:CTRL+C 受信時のシグナルハンドラです。
def disp_signumber2(ival){
print("Signal Received!! [%d]\n",ival)
print("終了の仕方:当プロセス(%d)に、シグナル9番を送信して下さい。\n",PID);
print("( kill -9 %d )\n",PID);
}
# その2:他のシグナル受信時のシグナルハンドラです。
def disp_signumber (ival){
print("Signal Received!! [%d]\n",ival)
}
# シグナルハンドラを設定します。
for(i=1;i<NSIG;i++){ # i = シグナル番号です。(全てのシグナル番号を処理対象とします。)
if(i==2) # CTRL+C 受信時のシグナルハンドラを設定します。
rx_signal(i,&disp_signumber2())
else # 他のシグナル受信時のシグナルハンドラを設定します。
rx_signal(i,&disp_signumber ())
}
# シグナル待ち受けループに入ります。
while(TRUE){ # 繰り返しモニタ出来るように、無限ループとします。
pause() # シグナル待ち受け時はポーズで待ちます。
}
&br()
&br()
&br()
表示オプション
横に並べて表示:
変化行の前後のみ表示: