📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == シグナルとは、プロセス間で通信を行うための仕組みであり、Linuxカーネルに実装されている。<br> 実行中のプロセス…」 |
|||
| 104行目: | 104行目: | ||
== trap コマンド == | == trap コマンド == | ||
==== trapコマンドの使用方法 ==== | ==== trapコマンドの使用方法 ==== | ||
<code>trap</code>コマンドは、送出されたシグナルを捕捉して、予め指定された処理を実行するコマンドである。<br> | |||
trap "<コマンド>" <シグナルリスト> | trap "<コマンド>" <シグナルリスト> | ||
<br> | <br> | ||
実行中のシェルスクリプトに対して送出されたシグナルは、<code>trap</code>コマンドを使用することで捕捉することができる。<br> | |||
<br> | |||
<code>kill</code>コマンド等により、シグナルリストに指定されたシグナルが送出されると、<code>trap</code>コマンドはそれを捕捉して、指定したコマンドを実行する。<br> | |||
<code>trap</code>コマンドを使用することにより、各シグナルの規定の動作を置き換えることができる。<br> | |||
ただし、強制終了のシグナルである9番はtrapすることはできないため、注意すること。 | <u>ただし、強制終了のシグナルである9番はtrapすることはできないため、注意すること。</u><br> | ||
trap "echo trapped." 2 | trap "echo trapped." 2 | ||
| 120行目: | 119行目: | ||
<br> | <br> | ||
==== trap処理のリセット ==== | ==== trap処理のリセット ==== | ||
trap コマンドでシグナル捕捉時に実行するように指定した動作は、リセットを行うことで解除することができる。 | <code>trap</code>コマンドでシグナル捕捉時に実行するように指定した動作は、リセットを行うことで解除することができる。<br> | ||
<br> | |||
trap | <code>trap</code>コマンドにシグナルリストのみを指定して、指定されたシグナルの捕捉処理をリセットする。<br> | ||
trap <シグナルリスト> | |||
<br> | |||
trap | <code>trap</code>コマンドで指定した処理をリセットする場合(例: <code>trap "rm -f *.tmp; exit 1" 1 2 3 15</code>)、<br> | ||
各シグナルの標準の動作に戻すには、<code>trap 1 2 3 15</code>のように、リセットするシグナルのみを指定して実行する。<br> | |||
trap | <br> | ||
<code>trap</code>コマンドの処理を指定した部分に何も記述しないことにより、シグナル受信時に標準の動作に戻すことができる。<br> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>ただし、<code>trap "" 1 2 3 15</code>と記述した時、シグナルを捕捉した場合は""を実行する。</u><br> | |||
<u>これは何も処理をしないという意味になり、結果として、該当するシグナルを無視するという設定になってしまう。</u><br> | |||
<br> | |||
trap 'echo trapped.' 2 | |||
# ここで、[Ctrl]+[C]キーを押下する | |||
trapped. # trapコマンドに指定した処理が実行される | |||
trap 2 # trapコマンドの設定をリセットする | |||
# ここで、[Ctrl]+[C]キーを押下する | |||
# 指定した処理が解除されているのが確認できる | |||
# | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:シェルスクリプト]] | [[カテゴリ:シェルスクリプト]] | ||