シェルスクリプトで終了処理

表題の通り。正常に最後まで終われば問題ないのだが、`kill`コマンドや”Ctrl-C“で終了させた時に決まった処理をさせたい。

■ 環境

  • sh

■ trap

ビルトインコマンドの`trap`を使う。例えば下記の通り。

#!/bin/sh

signals() {
  echo "exit"
  exit
}

trap signals SIGHUP SIGINT SIGKILL SIGTERM

echo "pid = $$"
while true
do
  /bin/echo -n "."
  sleep 3
done
echo "finish."

# EOF

`trap`の引数は下記の通りである。

trap 【処理 or 関数】 【シグナルの指定】

このスクリプトを実行する。

$ ./test.sh
pid = 17717
....

終了時に”signals()“を呼ぶようにしてみた。”exit“と出力して終了。

Ctrl-C“で終了すると下記のようになる。

$ ./test.sh
pid = 17717
.................................^Cexit
$

続いて別のターミナルから`kill`コマンドで停止してみる。

$ ./test.sh
pid = 17792
........exit
$

以上。