バックグランドジョブをkillする

source killjobs.sh . killjobs.sh
現在のシェルで動作しているジョブを終了する。
ジョブ制御はシェル単位なので、現在のジョブを終了するには、.またはsourceコマンドで実行する。
for文で3つのシグナルを使い、順番に強力なシグナルにする。
jobs -pはプロセスIDのみ表示し、wc -lで個数を数える。
その個数が0になるまで、killする。
プロセスが終了するまで時間がかかるので、sleepコマンドでシェルを一時停止する。

#!/usr/bin/sh
for signal in TERM QUIT KILL; do
    processno=`jobs -p | wc -l`
    if [ $processno -eq 0 ]; then
        break
    else
        processid=`jobs -p | tr '\n' ' '`
        kill "-$signal $processid" 
    fi  
    sleep 3
done