У меня есть плохо закодированная бесконечная циклическая программа, которую я хочу запустить в командной строке, но не вечно. Я хочу использовать ulimit, чтобы, если она будет зацикливаться вечно, она обрывалась.
Я пытаюсь:
$> bash -c "ulimit -t 1; java myinfloopprogram"
но как будто ничего не происходит. Что происходит, моя команда в командной строке неверна? myinfloopprogram работает просто отлично.
Я использую терминал, версия Ubuntu 9.10.
решение1
Использует ли программа-цикл на самом деле ресурсы ЦП?
-t — для процессорного времени, а не для времени по часам, поэтому, если ваша программа фактически не использует процессорное время, она не будет завершена.
решение2
Может быть, вместо этого попробуйте что-то вроде этого:
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
решение3
ulimit
вероятно, не то, что вам нужно. Вам нужна какая-то функция bash timeout. В bash ничего не встроено, но есть несколько скриптов, которые это делают. напримерhttps://stackoverflow.com/questions/687948/timeout-a-command-in-bash-without-unnecessary-delay