bash linux中的超时java程序

时间:2014-11-13 22:46:28

标签: java linux bash shell

我使用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可以使程序停止,脚本将进入下一个程序。

2 个答案:

答案 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 &