Чего вы пытаетесь достичь?
Звучит как очень хакерский способ наблюдения за процессом.
Не могли бы вы просто нанять:
ulimit -T 10 # the maximum number of threads
или вариант (man bash
, / ulimit Ввод )?
Таким образом, программа могла бы даже более грациозно закрыться.
Примечание : поскольку вы предлагаете использовать 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