我有一個編碼錯誤的無限循環程序,我想在命令行上運行它 - 但不是永遠運行。我想使用 ulimit,所以如果它永遠循環,它就會被切斷。
我想:
$> bash -c "ulimit -t 1; java myinfloopprogram"
但就像什麼都沒發生一樣。這是怎麼回事,是我的命令列命令錯誤嗎? myinfloop程式運作得很好。
我正在運行終端,版本是 Ubuntu 9.10 。
答案1
循環程式實際上使用CPU嗎?
-t 表示 CPU 時間,而不是掛鐘時間,因此如果您的程式實際上沒有使用任何 CPU 時間,則它不會被終止。
答案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 逾時功能。 bash 中沒有內建任何內容,但有一些腳本可以做到這一點。例如https://stackoverflow.com/questions/687948/timeout-a-command-in-bash-without-unnecessary-delay