再帰的に子プロセスをkillする

あるプロセスが長期間放置していると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

しばらく運用してみる。