タイトル
TOPIT関連覚え書きシェル(Shell)サンプル → This Page
シェル(Shell)サンプル

簡易プロセス監視

前提

実施環境(以下の両方でテストしてます)
Red Hat 5.3+bash-3.2
Windows7+Cygwin1.7.9

サンプル

target.sh の生存を監視する watchproc.sh を作成します。

・ps -ef で全てのプロセスをフル出力
・grep で target.sh をグレップ
・wc -l で対象行数をカウント
としています。
つまり取得したカウントがゼロならば対象プロセスは生存していません

ただし、今回のサンプルは Cygwin 上での動作はダメでした。
(サンプル2は正常動作する)
psコマンドの結果、 target.sh が /usr/bin/sh となるようです。
grepコマンドでひっかける対象を工夫しないといけないです。

watchproc.sh
#!/bin/sh

# --------------------------------------------------
# 簡易プロセス監視
# --------------------------------------------------

echo "main - Start"

# バックグラウンドで適当なシェルを実行(非同期実行)
sh ./target.sh 1 &
sh ./target.sh 2 &
sh ./target.sh 3 &

# 非同期実行したシェルの監視
while true
do
	ALIVE=`ps -ef | grep "target.sh" | grep -v grep | wc -l`
	if [ ${ALIVE} = 0 ]; then
		# 監視プロセスがなくなった
		echo "main - None"
		break
	else
		# 監視プロセスが生存中
		echo "main - Live"
	fi
	sleep 1
done

echo "main - End"


target.sh
#!/bin/sh

# --------------------------------------------------
# 監視対象プロセス
# --------------------------------------------------

echo "sub - ${1} - Start"
sleep 2
echo "sub - ${1} - 1"
sleep 2
echo "sub - ${1} - 2"
sleep 2
echo "sub - ${1} - 3"
sleep 2
echo "sub - ${1} - End"

exit 0


実行結果

main - Start
sub1 - Start
sub2 - Start
sub3 - Start
main - Live     ←監視対象が生存中
main - Live     ←監視対象が生存中
sub1 - 1
sub2 - 1
sub3 - 1
main - Live     ←監視対象が生存中
main - Live     ←監視対象が生存中
sub1 - 2
sub2 - 2
sub3 - 2
main - Live     ←監視対象が生存中
main - Live     ←監視対象が生存中
sub1 - 3
sub2 - 3
sub3 - 3
main - Live     ←監視対象が生存中
main - Live     ←監視対象が生存中
sub1 - End
sub2 - End
sub3 - End
main - None     ←監視対象が見つからない
main - End      ←処理終了


サンプル2

ちなみに自分自身から起動させたものを監視するのであればこれだけでOK
watchproc2.sh
#!/bin/sh

# --------------------------------------------------
# 簡易プロセス監視
# --------------------------------------------------

echo "main - Start"

# バックグラウンドで適当なシェルを実行(非同期実行)
sh ./target.sh 1 &
sh ./target.sh 2 &
sh ./target.sh 3 &

# 自分で起動した子プロセスならこれだけで良い
wait

echo "main - End"


実行結果2

main - Start
sub1 - Start
sub2 - Start
sub3 - Start
sub1 - 1
sub2 - 1
sub3 - 1
sub1 - 2
sub2 - 2
sub3 - 2
sub1 - 3
sub2 - 3
sub3 - 3
sub1 - End
sub2 - End
sub3 - End
main - End


サンプルのダウンロード

サンプル一式(zip)
文字コードUTF-8、改行コードLFです。

更新履歴

2011/08/06 本ページ新規追加


TOPIT関連覚え書きシェル(Shell)サンプル → This Page