Open2

shellscript内で trap を使って指定した順番でchild process を kill する

とりあえず動いたやつ

#!/bin/sh
cleanup(){
  echo "clealing up..."
  kill "${child_pid3}";
  wait "${child_pid3}"; 
  echo "${child_pid3} is killed"
  kill "${child_pid2}";
  wait "${child_pid2}"; 
  echo "${child_pid2} is killed"
  kill "${child_pid1}";
  wait "${child_pid1}"; 
  echo "${child_pid1} is killed"
}
# SIGINT, SIGTERM を受けたら、SIGTERM にして、parent は終了させない
trap 'trap " " TERM; cleanup' INT TERM

echo "The scrip pid is $$"
sleep 30 &
child_pid1="$!"
sleep 40 &
child_pid2="$!"
sleep 50 &
child_pid3="$!"
wait # 全てのプロセスが終了するまで待つ(親プロセスもいきたまま)

set -e をつけていると trap が動作しないように見える

ログインするとコメントできます