検索
連載

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

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

Share
Tweet
LINE
Hatena
前のページへ |       

シグナルを送るにはどうしたらよいか?

 シグナルは、通常“端末が切断されたとき”や“異常終了したとき”などの出来事に応じて発生します。

 意図的にシグナルを発生させるには、キー操作や「kill」コマンドを使用します。killコマンドの場合は「kill -s シグナル プロセスID」または「kill -s シグナル %ジョブ番号」でシグナルを送ります。送ることができるシグナルは「kill -l」で確認できます。

 この他、シグナルを送ることができるコマンドには、シグナルを送る対象を名前で指定する「killall」コマンドや「pkill」コマンドなどがあります()。

【※】pkill以前のコマンドに「skill」コマンドがあります。skillコマンドは、psコマンドやpkillコマンドと同じ「procps-ng」パッケージに収録されています。



シグナルを送るキー操作

 「シグナルを送るキー操作」でよく使われるのが、本稿の最初に挙げた[CTRL]+[C]キーと[CTRL]+[Z]キーです。

 [CTRL]+[C]キーは、フォアグラウンドで実行されているプロセス(フォアグラウンドジョブで実行されている全てのプロセス)に「SIGINT」シグナルを送ります。多くのプロセスはSIGINTシグナルを受け取ると終了します。そこで、“実行中のコマンドを終了させるには[CTRL]+[C]キー”という使い方ができます。

 同様に、[CTRL]+[Z]キーは、フォアグラウンドで実行されているプロセスに「SIGTSTP」シグナルを送ります。SIGTSTPシグナルを受け取ったプロセスは「停止」します。停止したプロセスは「fg」コマンドまたは「bg」コマンドで「再開」します。

 端末のキー操作は「stty -a」で確認できます(画面1)。「stty」は端末の設定を変更/表示するコマンドです。

画面1
画面1 「stty -a」で端末の設定を確認する

 なお、シグナルとは働きが異なりますが、同じように使用できるキー操作として、表示の一時停止と再開を行う[CTRL]+[S]キーと[CTRL]+[Q]キー、入力の終了(EOF:End Of File)を表す[CTRL]+[D]キーなどがあります。[CTRL]+[D]キーはbashのデフォルト設定の場合に「入力の終了」、すなわち「直ちにシェルを終了」という動作になるので注意してください()。

【※】環境変数IGNOREEOFで「シェルが[CTRL]+[D]を無視する回数」を設定できます。例えば、「IGNOREEOF=3」で3回無視(=4回目でシェルを終了)となります。また、「set -o ignoreeof」で10回無視(「IGNOREEOF=10」相当)という設定ができます。



シグナルを送るキー操作を試してみよう

 それでは、実際にシグナルを送るキー操作を試してみましょう。

 以下の画面2画面3では、動作を分かりやすくするために「ping localhost」を実行してキー操作を試しています。「ping」コマンドは、サーバやIPアドレスを指定して応答の有無を調べるコマンドです。今回は対象を「localhost」、つまり自分自身として、単に“1秒ごとに結果を1行表示し続けるコマンド”として使用しています。

画面2
画面2 [CTRL]+[S]キーで表示を停止([CTRL]+[S]キーはbashが表示を停止するだけで、シグナルは送信されません)
画面3
画面3[CTRL]+[Q]キーで表示を再開(画面2の続き)

 [CTRL]+[Q]キーは表示を再開するだけで、シグナルは送信されません。なお、[CTRL]+[Q]以外のキーでも再開できますが、その場合は入力したキーが表示されます。

 このとき、別の端末で「ps」コマンドを使ってプロセスの状態を表示すると、以下のようになります(画面4)。

画面4
画面4 画面2、画面3のときのプロセスをpsコマンドで表示

 ここでは、「ps -a -O stat」としています。「-a」は他の端末の情報も表示するオプション、「-O stat」は表示にSTAT(状態)を加えるオプションです。

 画面4内に緑色で表示されている「S」は、割り込み可能なスリープ状態を示します。一瞬実行されて、その後は入力待ちのようなコマンドはこのように表示されます。また、フォアグラウンドで実行されている場合は「」も表示されます。

 次回はkillコマンドを使ったシグナルの送信を試します。


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

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