在使用Runtime类完成执行的任何进程之前,java中的主线程是否完成

时间:2012-06-21 12:49:01

标签: java multithreading runtime.exec

我正在使用Runtime类来执行软件的安装。但是,它不起作用,这意味着,在我解雇作业(使用Runtime类创建)之后,在某个时间(很快)之后,安装作业就会退出。我认为问题是主线程必须完成并因此杀死使用Runtime类创建的Process。我对么 ?这里有什么解决方案?

这就是我在主要课程中解雇我的工作的方式:

try
        {
            Runtime.getRuntime().exec(cmd);
        }                               
        catch(IOException e)    
        {   
            //add logging functionality
            e.printStackTrace();
        }

此命令后不久,主函数完成。

Runtime命令没有问题。它工作..我甚至可以看到它开始(安装taht我通过代码解雇)然后它突然退出。

3 个答案:

答案 0 :(得分:5)

您可能想要查看java.lang.Process类。你可能想要这样的东西:

        Process process = Runtime.getRuntime().exec(cmd);
        process.waitFor();

子流程可能正在接收SIGHUP并退出。

编辑:

在上下文中,我想是这样的事情:

    try
    {
        Process process = Runtime.getRuntime().exec(cmd);
        process.waitFor();
    }                               
    catch(IOException e)    
    {   
        //add logging functionality
        e.printStackTrace();
    }
    catch(InterruptedException e)    
    {   
        e.printStackTrace();
    }

答案 1 :(得分:1)

创建的进程是主线程的进程。如果主线程完成,则进程将被终止,类似于手动执行命令并按 ctrl c 或关闭窗口。

答案 2 :(得分:0)

这只是一个疯狂的猜测,但我认为编程退出是因为你的代码中有错误(逻辑)可能是一个很快退出的while循环,

尝试擅长运行时执行的代码。

这个过程可能陷入僵局。解决方案在评论中,带有样本。