我使用bash运行不同的java程序。
对于某些程序,有些bug会遇到无限循环,所以我想设置5秒的时间限制。如果程序无法在5秒内完成,则bash脚本应继续运行其他程序,而不是等待当前程序结束。
我试过了
timeout 5 java <my program>
但是当我遇到有问题的程序时,我的脚本仍然无法继续。
我也尝试过这里提供的脚本:http://www.bashcookbook.com/bashinfo/source/bash-4.0/examples/scripts/timeout3没有运气,我的脚本仍然无法继续。
我尝试的另一个命令是
( /path/to/slow command with options ) & sleep 5 ; kill $!
当我使用上面的命令运行我的脚本时,它表示没有找到进程ID,但实际上它还在运行有问题的程序。
我想知道是否有人试图超时运行无限循环的运行java程序。如果是这样,请说清楚!
顺便说一句,在程序进入无限循环时使用ctr + c可以使程序停止,脚本将进入下一个程序。
答案 0 :(得分:0)
你可以在你的java应用程序中创建一个监视器线程,在一定的超时后,杀死来自&#34;内部&#34;的执行java应用程序。
类似
Thread t = new Thread( new Monitor() );
t.setDaemon( true ); // we want this thread to quit if the enclosing app finishes before it does
t.start();
...
class Monitor
extends Runnable
{
public void run()
{
Date START = new Date();
boolean timeout = false;
while( ! timeout )
{
Date NOW = new Date();
timeout = ( NOW.getTime() - START.getTime() >= 5000 );
}
System.exit( 1 );
}
}
答案 1 :(得分:0)
一个更黑客的解决方案:
sleep <your_preferend_timeout> && execute_whatever_you_want_here &