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

シグナル

1,953 views

Published on

jus共催 第10回初心者向けなのかと百条委員会化する午前のシェル勉強会/第28回基準値を超えるシェル芸勉強会の資料です

Published in: Engineering
  • Be the first to comment

シグナル

  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) に – ハンドラ実行中のハンドラは シグナルマスクの概念を作って選択可能とした

×