Убить 10-минутный процесс зомби в сценарии bash linux - PullRequest
3 голосов
/ 04 мая 2010

Я возился с регулярным выражением yukondude с небольшим успехом. Я пытаюсь убить процессы, которые старше 10 минут. Я уже знаю, что идентификаторы процесса. Я перебираю массив каждые 10 минут, чтобы увидеть, есть ли какие-нибудь затяжные процессы и их нужно убить. У кого-нибудь есть мысли по этому поводу?

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

1 Ответ

6 голосов
/ 04 мая 2010

Так же, как настоящие зомби, процессы зомби не могут быть убиты - они уже мертвы.

Они уйдут, когда их родительский процесс вызовет 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 - возможно, по идентификатору родительского процесса или тому подобному? Во всяком случае, так должно быть.

...