Tenho um programa de loop infinito mal codificado que desejo executar na linha de comando - mas não para sempre. Eu quero usar o ulimit, então se ele fizer um loop para sempre, ele será cortado.
Estou tentando:
$> bash -c "ulimit -t 1; java myinfloopprogram"
mas é como se nada estivesse acontecendo. O que está acontecendo, meu comando de linha de comando está errado? myinfloopprogram funciona perfeitamente.
Estou executando um terminal e a versão é Ubuntu 9.10.
Responder1
O programa em loop está realmente usando CPU?
-t é para o tempo de CPU, não para o tempo do relógio de parede; portanto, se o seu programa não estiver realmente usando nenhum tempo de CPU, ele não será eliminado.
Responder2
Talvez tente algo assim:
java myinfloopprogram &
pid=$!
for i in $(seq 1 60); do
kill -0 $pid >/dev/null || break
sleep 1
done
kill -0 $pid >/dev/null || kill -TERM $pid
Responder3
ulimit
provavelmente não é o que você precisa. Você precisa de algum tipo de recurso de tempo limite do bash. Não há nada embutido no bash, mas existem alguns scripts circulando para fazer isso. por exemplohttps://stackoverflow.com/questions/687948/timeout-a-command-in-bash-without-unnecessary-delay