Successfully reported this slideshow.
Your SlideShare is downloading. ×

シグナル

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 21 Ad

More Related Content

Slideshows for you (20)

Similar to シグナル (20)

Advertisement

Recently uploaded (20)

シグナル

  1. 1. シグナルシグナル USP 友の会 今泉光之 @bsdhack https://bsdhack.org
  2. 2. シグナル 2 講師講師 ● 今泉光之  UNIX/Linux環境でのプログラミングを中心に、ネットワークや インフラなども含め20年以上に渡る経験だけは積んできました。  当初はC言語でコンパイラ、Xサーバ、ドライバ、TCP/IPによる 通信などシステム系のプログラミングが主でしたが、最近はPerl やPHPなどのWeb向けのLLも使っています。
  3. 3. シグナル 3 シグナルとはシグナルとは ● プロセス間通信の手段 ● 非同期のイベントを通知する仕組み ● 宛先プロセスの処理に割り込む
  4. 4. シグナル 4 シグナルは割り込みシグナルは割り込み
  5. 5. シグナル 5 シグナルと割り込みシグナルと割り込み ● シグナルはソフトウェア由来 ● 割り込みはハードウェア由来 ※ 個人の感想であり、出典・一次ソースを示すものでは ありません。
  6. 6. シグナル 6 シグナルの種類(抜粋)シグナルの種類(抜粋) ● ハングアップ (SIGHUP) 元々は電話が切れた事を通知した。シグナル番号 1 。 ● 割り込み (SIGINT) 端末から割り込みキー (Ctrl+C) で発生。シグナル番号 2 。 ● 終了 (SIGQUIT) 端末から終了キー (Ctrl+) で発生。シグナル番号3。 ● 強制終了 (SIGTERM) プロセスを強制的に終了させる。シグナル番号15.
  7. 7. シグナル 7 シグナル受信時の挙動シグナル受信時の挙動 ● 無視する 何もなかったかの様に粛々と動作を続ける ● デフォルトの動作を実行する システム( OS )によって定義された動作を実施する ● 捕捉する 独自の処理を定義して実施する
  8. 8. シグナル 8 シグナルハンドラシグナルハンドラ ● シグナルを受信した時に実行される処理 ● 登録されていない場合は OS によってデフォルトの挙動 – SIGHUP プロセスの終了。 – SIGINT プロセスの終了。 – SIGQUIT プロセスの終了とコアダンプ。 – SIGTERM プロセスの終了。
  9. 9. シグナル 9 シグナルハンドラの登録シグナルハンドラの登録 ● シェルでは trap(1) を利用する ● 基本的にはシェルの組み込みコマンド ● シグナルの種類と受け取った時の処理を指定する trap [ 処理 ] シグナル [ … シグナル ] ● シグナルはシンボルでも数字でも指定可能
  10. 10. シグナル 10 シグナルハンドラの複数指定シグナルハンドラの複数指定 ● シグナルの種類毎に複数の trap(1) を指定できる trap 処理 1 HUP もしくは trap 処理 1 1 trap 処理 2 INT もしくは trap 処理 2 2 trap 処理 3 QUIT もしくは trap 処理 3 3 trap 処理 15 TERM もしくは trap 処理 15 15
  11. 11. シグナル 11 疑似シグナル疑似シグナル EXITEXIT ● 終了時のハンドラ。シグナル番号は 0 実際のシグナルではないが trap(1) に指定できる ● プロセスが終了するときに実行させる処理を登録 trap 終了処理 EXIT もしくは trap 終了処理 0 ● シグナルを受信した場合も同様 trap 終了処理 0 1 2 3 15
  12. 12. シグナル 12 traptrap のアクションのアクション ● trap(1) のアクションは省略可 – アクションを省略するとデフォルトの挙動に戻す trap 1 2 3 ● trap(1) のアクションに空文字列を指定すると無視 trap '' 1 2 3 ● trap(1) のアクションは終了しない 明示的に exit(1) して終了させる必要がある
  13. 13. シグナル 13 bashbash のの traptrap ● シェルの組み込みなので機能に差がある – bash の trap(1) はハンドラの一覧表示ができる trap -p
  14. 14. シグナル 14 シグナルの送信シグナルの送信 ● kill(1) コマンド kill [-s シグナル名 ][- 番号 ] PID[ …PID]
  15. 15. シグナル 15 シグナルの種類(再訪)シグナルの種類(再訪) ● 代表的なシグナル – SIGILL不正命令 不正な命令の実行 4 – SIGBUS バスエラー 不正メモリ操作 7 – SIGFPE 浮動小数点例外 ゼロ除算など 8 – SIGSEGV セグメンテーション違反 不正メモリアクセス 11 – SIGPIPE パイプ書き込みエラー 相手がいないパイプ 13 – SIGUSR1 ユーザー定義シグナル 10 – SIGUSR2 ユーザー定義シグナル 11
  16. 16. シグナル 16 シグナルの用途シグナルの用途 ● SIGHUP 設定の読み込みやログの再オープン処理など ● SIGCHLD 無視する事で子プロセスのゾンビ化を防止 ● SIGUSR1 GNU dd(1) では進捗状況を表示
  17. 17. シグナル 17 特権的なシグナル特権的なシグナル ● 殆どのシグナルはプロセスが挙動を決められる – 無視、特別な処理、デフォルトの挙動 ● 例外的に挙動を決められないシグナル – SIGKILL プロセスの強制終了。シグナル番号は 9 。 kill(1) コマンドで発生 – SIGSTOP 実行中断。シグナル番号は 19 。 端末から中断キー (Ctrl+Z) で発生
  18. 18. シグナル 18 緊急時に便利なシグナル緊急時に便利なシグナル ● 緊急時には Ctrl+Z が有効 trap '' 1 2 3 15 : rm -rf * ● kill -9 するためには pid を調べる必要がある(時間がかかる) ● 端末から Ctrl+Z すれば取りあえず停止する
  19. 19. シグナル 19 余談(1)余談(1) ● 初期のシグナル (SYSV シグナル ) は牧歌的 – システムコールの実行中のシグナル 停止してエラーリターンする – ハンドラ実行中のハンドラは 実行されない様にする(デフォルトに戻る)
  20. 20. シグナル 20 余談(2)余談(2) ● 中期のシグナル (BSD シグナル ) は少し頑張った – システムコールの実行中のシグナル ハンドラを実行した後はシステムコールに戻る – ハンドラ実行中のハンドラは 保留(ブロック)されてハンドラ終了後に届く
  21. 21. シグナル 21 余談(3)余談(3) ● 後期のシグナルは論理的(当社比) – システムコールの名前を変える signal(2) は sigaction(2) に – ハンドラ実行中のハンドラは シグナルマスクの概念を作って選択可能とした

×