Tag: シグナル

bashのシグナルをトラップする

シグナルをトラップする方法

参考この人のシェルスクリプト関連の話題は深い… シェルスクリプトでシグナルをトラップして処理したい場合に参考になった。

tracebackの方はサブシェルで起動するようにすれば良いかも

EXIT トラップ内で pkill -P $$ を使う例は、親シェル配下の子プロセスをまとめて止めたい時だけ使う。意図しないプロセスまで終了させる可能性があるので注意。

#!/bin/bash
set -u # Check unset variables only
#set -ue # Check unset variables. Exit on error
LANG=C

# Trap signals
trap_HUP() {
  echo "Trap HUP signal."
  exit 1
}
trap_INT() {
  echo "Trap INT signal."
  exit 1
}
trap_TERM() {
  echo "Trap TERM signal."
  exit 1
}
trap_QUIT() {
  echo "Trap QUIT signal."
  exit 1
}
on_exit(){
  echo "Kill child processes on exit by 'pkill -P $$'"
  pkill -P $$
  echo "Exit."
}
on_error() {
  errcode=$?
  echo "error line $1: command exited with status $errcode."
}

trap 'trap_HUP' HUP
trap 'trap_INT' INT
trap 'trap_QUIT' QUIT
trap 'trap_TERM' TERM

# bash pseudo-signals
trap 'on_exit' EXIT
trap 'on_error $LINENO' ERR
Read more...