Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
シグナルシグナル
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) に
– ハンドラ実行中のハンドラは
シグナルマスクの概念を作って選択可能とした
Próxima SlideShare
Cargando en…5
×

シグナル

2.309 visualizaciones

Publicado el

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

Publicado en: Ingeniería
  • Sé el primero en comentar

シグナル

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

×