Linuxのシグナルまとめ
タグ: linux / 初版公開: 2013-11-10

Linuxのシグナルについて調べたのでまとめる。 最初にシグナルの一覧を示し、重要なものは抜粋して説明する。

参考: http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/signal.7.html

シグナルの一覧

killコマンドで送信できるシグナルの一覧は-lオプションで見ることができる。

kill -l

x86 Linuxのシグナル一覧

一部のシグナルの意味は、CPUのアーキテクチャによって異なる。 以下の表ではx86のシグナル一覧を示す。コメント蘭はmanからの引用である。

IDシグナルコメント
1SIGHUP制御端末(controlling terminal)のハングアップ検出、または制御しているプロセスの死
2SIGINTキーボードからの割り込み (Interrupt)
3SIGQUITキーボードによる中止 (Quit)
4SIGILL不正な命令
5SIGTRAPトレース/ブレークポイント トラップ, IOT トラップ。SIGABRT と同義
6SIGABRTabort(3) からの中断 (Abort) シグナル
7SIGBUSバスエラー (不正なメモリアクセス)
8SIGFPE浮動小数点例外
9SIGKILLKill シグナル
10SIGUSR1ユーザ定義シグナル 1
11SIGSEGV不正なメモリ参照
12SIGUSR2ユーザ定義シグナル 2
13SIGPIPEパイプ破壊:読み手の無いパイプへの書き出し
14SIGALRMalarm(2) からのタイマーシグナル
15SIGTERM終了 (termination) シグナル
16SIGSTKFLT数値演算プロセッサにおけるスタックフォルト (未使用)
17SIGCHLD子プロセスの一時停止 (stop) または終了
18SIGCONT一時停止 (stop) からの再開
19SIGSTOPプロセスの一時停止 (stop)
20SIGTSTP端末より入力された一時停止 (stop)
21SIGTTINバックグランドプロセスの端末入力
22SIGTTOUバックグランドプロセスの端末出力
23SIGURGソケットの緊急事態 (urgent condition) (4.2BSD)
24SIGXCPUCPU時間制限超過 (4.2BSD)
25SIGXFSZファイルサイズ制限の超過 (4.2BSD)
26SIGVTALRM仮想アラームクロック (4.2BSD)
27SIGPROFprofiling タイマの時間切れ
28SIGWINCHウィンドウ リサイズ シグナル (4.3BSD, Sun)
29SIGIO入出力が可能になった (4.2BSD)
30SIGPWR電源喪失 (Power failure) (System V)
31SIGSYSルーチンへの引き数が不正 (SVr4)

Linuxのリアルタイムシグナル一覧

シグナルID 33から64まではリアルタイムシグナルと呼ばれている。 事前に定義された意味はなく、アプリケーションで定義した用途に使用できる。 ただし33はglibcの内部で使用されており、使えない。

IDシグナル
34SIGRTMIN
35SIGRTMIN+1
36SIGRTMIN+2
37SIGRTMIN+3
38SIGRTMIN+4
39SIGRTMIN+5
40SIGRTMIN+6
41SIGRTMIN+7
42SIGRTMIN+8
43SIGRTMIN+9
44SIGRTMIN+10
45SIGRTMIN+11
46SIGRTMIN+12
47SIGRTMIN+13
48SIGRTMIN+14
49SIGRTMIN+15
50SIGRTMAX-14
51SIGRTMAX-13
52SIGRTMAX-12
53SIGRTMAX-11
54SIGRTMAX-10
55SIGRTMAX-9
56SIGRTMAX-8
57SIGRTMAX-7
58SIGRTMAX-6
59SIGRTMAX-5
60SIGRTMAX-4
61SIGRTMAX-3
62SIGRTMAX-2
63SIGRTMAX-1
64SIGRTMAX

主なシグナルの解説

manの解説は直感的にはわかりにくいので、 特に利用頻度が高いシグナルをピックアップして説明する。

SIGHUP

プログラムを再起動するシグナルだ。 設定ファイルの再読み込みをさせる場合に使う事が多い。 以下のように送信する。

kill -HUP 1234

SIGINT

プログラムを終了させるシグナルだ。 シェルからCtlr + Cで送信できるシグナルでもある。

kill -INT 1234

SIGQUIT

これもプログラムを終了させるシグナルだ。 シェルからCtlr + /で送信できるシグナルでもある。

SIGTERM

プロセスを正常に終了させるシグナルだ。 killコマンドで送信するデフォルトシグナルである。 これが効かない場合はSIGKILLを使う。

kill 1234

SIGKILL

プロセスを強制的に殺すためのシグナルである。 SIGINTやSIGTERMが効かない場合でも、殺すことができる。

kill -KILL 1234

または

kill -9 1234

SIGUSR1

ユーザ定義のシグナルで、プログラムによって意味が異なる。 ぱっと思いつくものではddで途中経過を表示させる用途に使われている。

kill -USR1 1234