長時間起動のプロセスをkillするスクリプト

例えば30分以上経っても処理が終わらないhttpdプロセスをkillする方法。親プロセスはroot権限でしょうから、grep -v rootで除外しておきます。このシェルスクリプトをrootで定期実行すればok

for i in `ps aux | grep httpd | grep -v root | gawk '{print $2 "_" $10}' | sed 's/://'`
do
        PROCCESSNUM=`echo $i | cut -f1 -d'_'`;
        TIMENUM=`echo $i | cut -f2 -d'_'`;

        if [ $TIMENUM -gt 30 ]; then
                kill $PROCCESSNUM;
                echo "kill $PROCCESSNUM at "`date`;
        fi
done

最初のfor文で 12345_023のようにプロセス番号_処理時間という文字列を取得(プロセス番号 処理時間というように空白区切りにするとfor文が空白で分割して回してしまうのであえてアンダーバーで区切りました)
次にcutコマンドでアンダーバーの左側と右側を取得。最後に継続時間が30分より大きいかチェックして、trueならkillコマンド発動という流れ。