3

私はyukondudeによる正規表現の答えをいじくり回してきましたが、ほとんど成功していません。10 分以上経過したプロセスを強制終了しようとしています。プロセスIDが何であるかはすでに知っています。私は10分ごとに配列をループして、残っているprocが周りにあり、殺す必要があるかどうかを確認しています. これについて簡単に考えている人はいますか?

ps -eo uid,pid,etime 3233332 | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {}
4

1 に答える 1

6

本物のゾンビと同じように、ゾンビ プロセスを強制終了することはできません。既に死んでいます。

wait()親プロセスが終了コードを取得するために呼び出したとき、または親プロセスが終了したときに、それらは消えます。


ああ、あなたは本当にゾンビのプロセスについて話しているのではありません。このbashスクリプトは、あなたが求めているものに沿っている必要があります:

ps -eo uid,pid,lstart |
    tail -n+2 |
    while read PROC_UID PROC_PID PROC_LSTART; do
        SECONDS=$[$(date +%s) - $(date -d"$PROC_LSTART" +%s)]
        if [ $PROC_UID -eq 1000 -a $SECONDS -gt 600 ]; then
            echo $PROC_PID
        fi
     done |
     xargs kill

これにより、UID 1000 が所有する、10 分 (600 秒) 以上実行されているすべてのプロセスが強制終了されます。おそらく、関心のある PID だけにフィルターをかけたいと思うでしょう - おそらく親プロセス ID などで?とにかく、それは進むべきものです。

于 2010-05-04T01:30:43.703 に答える