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