あるプロセスが長期間放置しているとOutOfMemoryで死ぬので、OutOfMemoryで死ぬ前にkillして起動しなおすと言う事をやりたい。
あるプロセスはそこそこな数の子・孫プロセスを作るので、子プロセスを全部辿ってkillしたい。
ただし、実行元の親プロセスは残す。
cronはなんとなく使わない。kill後の生死は問わない。
#!/bin/bash
色々やる &
# 時が来るまで待つ
sleep 86400
# 再帰的に子を辿る
function rpgrep(){
local ppid=$1;
for pid in $(pgrep -P $ppid); do
echo $pid
rpgrep $pid;
done
}
# $$=自身のPID
kill $(rpgrep $$)
# 自分自身を起動するコマンドとか。 exec "$@" とか
exec bash test.sh
しばらく運用してみる。