バックグラウンドジョブをkillするシェル

12月 29, 2009

バックグラウンドジョブのプロセスをkillするためのシェルをつくってみた。
以下のスクリプトでは、TERMでkillできなかった時のためQUIT,KILLをシグナルとして代入できるようにし、バックグラウンドジョブをカウントして0ならそのまま終了。ジョブがあれば、「kill シグナル PID」が実行される。ジョブのプロセスが終了するのに少し時間がかかる可能性があるため、最後にsleepでシェルを一時停止させる。
killjob.sh
killjob.jpg
練習用に、ループ状態を作り出すためのシェルloop.shを作成。バックグラウンドで実行し、スクリプトでkillしてみる。ジョブ制御はシェル単位なので、現在のシェルのジョブを終了するにはsourceか.で実行する必要がある。
実行例

$ ./loop.sh &
[1] 8085
$
$ jobs
[1]+ Running ./loop.sh & ←ジョブ実行中
$
$ . killjob.sh
[1]+ Terminated ./loop.sh ←ジョブが終了した
$
$ jobs
$


Categories: shell