連載
» 2019年07月25日 05時00分 公開

Linux基本コマンドTips(324):【 trap 】コマンド――シグナルを受け取った際の動作を設定する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シグナルを受け取った際の動作を設定、表示する「trap」コマンドです。

[西村めぐみ,@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シグナルを受け取った際の動作を設定、表示する「trap」コマンドです。

trapコマンドとは?

 「trap」はシグナルを受け取った際の動作を設定、表示するコマンドです。

 例えば、シェルスクリプトの中で、キーボードからの割り込みシグナル(SIGINT)に対応する動作をtrapコマンドで設定することにより、[CTRL]+[C]キーを押したときの動作を変更できます(シグナルについては、Linux再入門第16回を参照)。

 bashの内部コマンド(ビルトインコマンド、シェルコマンド)であるため、「man」コマンドではなく、「help」コマンドで詳細を表示できます。



trapコマンドの書式

trap 実行したいコマンド シグナル

trap -p [シグナル]

trap [-l]

※[ ]は省略可能な引数を示しています。





trapの主なオプション

短いオプション 意味
-p 指定したシグナルに対する設定を表示する(シグナルを指定しなかった場合はtrapコマンドによる全ての設定を表示)
-l シグナル番号とシグナル名を一覧表示する


シグナルを受け取った際の動作を設定する

 「trap コマンド シグナル」で、シグナルを受け取った際に実行するコマンドを設定できます。「trap シグナル」で設定を削除します。

 シグナルは数値またはシグナル名で指定します。シグナルの指定に使用できる値は「trap -l」で確認できます。なお、シグナル名のうち冒頭の「SIG」は省略可能です。

 trapコマンドはシェルスクリプトの中で使用することが多いでしょう。

 通常のシェルスクリプトであれば[CTRL]+[C]キーで処理を中断します。[CTRL]+[C]キーで発生するシグナルは「SIGINT」です。そこで、シェルスクリプトの中で「trap "" SIGINT」を実行すると、「SIGINTを受け取ったときに何も実行しない」、つまり、「[CTRL]+[C]キーを無視する」という動作を設定できます。

 無視する以外にも、シェルスクリプトの中で、SIGINTに対応する動作を設定することで、[CTRL]+[C]キーを押したときの動作を決定できます(画面1)。

コマンド実行例

trap コマンド シグナル

(シグナルを受け取ったときに実行するコマンドを指定する)

trap "echo === CTRL+C ===" SIGINT

(SIGINTを受け取ったら「=== CTRL+C ===」と表示する。SIGINT部分はINTまたは2でも指定可能)(画面1


画面1 画面1 SIGINTシグナルを受け取ったときの動作を決め、実行したところ

 画面2画面3では、シェルスクリプトの中で「trap "" SIGINT」を実行したときと、していないときの動作の違いを比較しています。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。