我有一个编码很差的无限循环程序,我想在命令行上运行它 - 但不是永远运行。我想使用 ulimit,这样如果它永远循环,它就会被切断。
我想:
$> bash -c "ulimit -t 1; java myinfloopprogram"
但好像什么都没发生。发生了什么事,我的命令行命令错了吗?我的infloopprogram运行正常。
我正在运行终端,版本是 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