本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シグナルを受け取った際の動作を設定、表示する「trap」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シグナルを受け取った際の動作を設定、表示する「trap」コマンドです。
「trap」はシグナルを受け取った際の動作を設定、表示するコマンドです。
例えば、シェルスクリプトの中で、キーボードからの割り込みシグナル(SIGINT)に対応する動作をtrapコマンドで設定することにより、[CTRL]+[C]キーを押したときの動作を変更できます(シグナルについては、Linux再入門第16回を参照)。
bashの内部コマンド(ビルトインコマンド、シェルコマンド)であるため、「man」コマンドではなく、「help」コマンドで詳細を表示できます。
trap 実行したいコマンド シグナル
trap -p [シグナル]
trap [-l]
※[ ]は省略可能な引数を示しています。
短いオプション | 意味 |
---|---|
-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)
画面2と画面3では、シェルスクリプトの中で「trap "" SIGINT」を実行したときと、していないときの動作の違いを比較しています。
Copyright © ITmedia, Inc. All Rights Reserved.