検索
連載

Linuxの「シグナル」って何だろう?“応用力”をつけるためのLinux再入門(16)(1/2 ページ)

前回、ジョブを停止させる際に使用した[CTRL]+[Z]キーや、コマンドの実行を中断したいときの[CTRL]+[C]キーは、どんな意味を持つ操作なのでしょうか。今回は、Linuxの「プロセス」や「ジョブ」の制御に関わりの深い「シグナル」を解説します。

Share
Tweet
LINE
Hatena
「“応用力”をつけるためのLinux再入門」のインデックス

連載目次

Linuxのシグナルとは何か?

 「シグナル」はプロセスとプロセスの間で通信を行う際に使用される“信号”のことで、シグナルを受け取ったプロセスは“何らかの動作”を行います。その動作は、例えば「再起動」であったり、「終了」であったりします。

 [CTRL]+[C]は「SIGINT」というシグナルを行うキー操作、[CTRL]+[Z]は「SIGTSTP」というシグナルを行うキー操作です。

シグナルの種類

 シグナルには多くの種類があり、名前と数値による値が決まっています。例えば、「1」は「SIGHUP(ハングアップ、制御している端末の終了)」、「2」は「SIGINT(インタラプト、キーボードからの割り込み)」です。主なシグナルは以下の通りです。

●主なシグナル
名前 番号 動作(※) 意味
SIGHUP 1 Term 制御端末の切断(ハングアップ)、仮想端末の終了
SIGINT 2 Term キーボードからの割り込みシグナル(通常は[CTRL]+[C])
SIGQUIT 3 Core キーボードによる中止シグナル(通常は[CTRL]+[\])
SIGFPE 8 Core 不正な浮動小数点演算(ゼロ除算やオーバーフローなど)の発生
SIGKILL 9 Term 強制終了シグナル(KILLシグナル)
SIGSEGV 11 Core 不正なメモリ参照の発生
SIGPIPE 13 Term 読み手のいないパイプへの書き込み
(通常はこのシグナルを受け取ると即時終了する)
SIGALRM 14 Term タイマー(Alarm)による終了
SIGTERM 15 Term 終了シグナル(「kill」コマンドのデフォルトシグナル)
SIGCHLD 17 Ignore 子プロセスの状態(終了、停止または再開)が変わった
SIGCONT 18 Cont 一時停止しているジョブへの再開シグナル
SIGSTOP 19 Stop 一時停止シグナル
SIGTSTP 20 Stop 端末からの一時停止シグナル(通常は[CTRL]+[Z])
SIGTTIN 21 Stop バックグラウンドジョブ/プロセスのキーボード入力待ち
SIGTTOU 22 Stop バックグラウンドジョブ/プロセスの端末出力待ち
SIGXCPU 24 Core CPU時間制限を越えた
SIGXFSZ 25 Core ファイルサイズ制限を越えた
SIGWINCH 28 Ignore ウィンドウのサイズが変更された

)「動作」はシグナルを受け取った際の動作で、デフォルトは以下の通りです。実際にどのような動作になるかは、コマンドによって異なります。

Term プロセスの終了
Ignore 無視
Core プロセスの終了とコアダンプ出力
Stop プロセスの一時停止
Cont プロセスが停止中の場合は実行の再開

 この他、どのようなシグナルがあるかは「man 7 signal」コマンドで確認できます()。また、「man bash」コマンドで「sig」や「シグナル」を検索すると、bashでの動作を調べることができます。

【※】「man」はマニュアルを参照するためのコマンドです。「man 7 signal」の「7」は章番号で、7章は「その他(Miscellaneous)」に分類されています(連載「Linux基本コマンドTips 第87回」参照)。



シグナルを受け取ると何が起こるのか?

 プロセスがシグナルを受け取ると何が起こるかは、コマンドによって異なります。

 例えば、端末で使用するコマンドの多くは、SIGINTを受け取ると実行を終了するようになっているため、[CTRL]+[C]キーで「実行中のプログラムを終了」させることができます。一方で、「less」コマンドのように終了しないようになっているコマンドもあります。

 端末で実行しているコマンドは、SIGHUPを受け取ると終了します。従って、X(X Window System)環境でコマンドを実行している最中に端末アプリケーションを終了すると、そのコマンドは終了します。また、ssh接続でコマンドを実行している最中に回線が切断された場合も、そのコマンドは終了します。

 これを防ぐのが「nohup」コマンドです。「nohup コマンド &」のように、コマンドnohupでコマンドをバックグラウンド実行させると、端末を終了させてもコマンドがSIGHUPを受け取らないようになり、その結果、コマンドは終了しなくなります。

 サーバプロセスの多くはSIGHUPを受け取るとプロセスを終了して再起動します。このため、SIGHUPシグナルは「設定ファイルの再読込」をさせたいときにも使われます。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る