Сценарий Unix, чтобы убить процесс после проверки условия несколько раз, а также периодически запускать

Я хочу написать сценарий оболочки Unix для запуска команды 3 раза каждые 80 секунд и записывать каждую последовательность в отдельной строке в текстовом файле. А также, если все результаты по 10 или более в строке, я хочу убить процесс:

например:

pstack <pid> | grep -c 'abcd'

5

pstack <pid> | grep -c 'abcd'

5

pstack <pid> | grep -c 'abcd'

5

//Nothing to do.

//after 80 seconds again it runs:

pstack <pid> | grep -c 'abcd'

10 

pstack <pid> | grep -c 'abcd'

10

pstack <pid> | grep -c 'abcd'

10

kill -9 < PID>     // because all three outputs are bigger than 10   

также

выходной файл:

5 5 5 

10 10 10 

Обратите внимание, что если выходная последовательность равна "10 10 11", "10 11 12" и т. Д., То процесс должен быть снова завершен. Но если это похоже на "9 9 10", то не нужно быть убитым.

1 ответ

Чего ты пытаешься достичь?

Похоже, очень хакерский способ контролировать процесс. Не могли бы вы просто нанять:

ulimit -T 10    # the maximum number of threads

или вариант (man bash, / ulimit Enter)?

Таким образом, программа могла бы даже быть более изящной при закрытии.


Примечание: так как вы предлагаете использовать kill -9 не пытаясь использовать другие сигналы, возможно, вы подразумеваете, что сигналы никогда не обрабатываются В этом случае вы, вероятно, можете использовать ulimit -i (максимальное количество ожидающих сигналов)

отрывок

#!/bin/bash

function dumpstack()
{
    pstack $(pgrep a.exe) | grep -c abcd
}

while sleep 1; do dumpstack; done | tee rawoutput.log |
    {
        trap "" INT
        count=0;
        while read stackframes; do 
            if [[ $stackframes -lt 10 ]]; then
                count=0
            else
                count=$(($count+1))
            fi

            if [[ $count -ge 3 ]]; then
                echo KILL -9 !
                            break
            fi
            echo "(debug frames:$stackframes, count:$count)"
        done
    } | tee cooked_output.log
Другие вопросы по тегам