シグナル(割り込み)

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

シグナル処理プログラムの記述方法(全体の流れ)

  1. 処理対象とするシグナル番号を選びます。
  2. シグナル受信時の処理内容を、ユーザ定義関数として記述します。
    • ユーザ定義関数内では、第1引数がシグナル番号となります。
    • ユーザ定義関数内での、使用できる関数に制約はありません。
  3. 定義したユーザ関数をシグナルハンドラとして設定します。


シグナルモニタの例

受信したシグナル番号を表示する例です。このため、処理対象とするシグナル番号は、ユーザー側にてキャッチ可能な全てシグナル番号とします。なお、このプログラムは 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()                             # シグナル待ち受け時はポーズで待ちます。
 }




|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|

link_pdfプラグインはご利用いただけなくなりました。

取得中です。