为什么Java.lang.Process在这段代码中没有抛出InterruptedException



此方法使用ProcessBuilder通过我的Java应用程序运行外部C程序。我已将其设置为等待1000毫秒。我正在给它传递一个进入无限循环的代码。但该进程从不抛出interruptedException。

    public void execute(String sourceFileName, long timeout,String inputFile,String outputFile,String errorFile) 
            throws IOException, InterruptedException
    {
        ProcessBuilder builder=new ProcessBuilder(sourceFileName+executableFileExtension);
        Process process=builder.start();
        process.waitFor(timeout,TimeUnit.MILLISECONDS);
    }   

我还注意到该方法返回控件,但进程仍在后台运行。为什么会发生这种情况?

来自过程文档:

退货:如果子流程已退出,则为true;如果子流程退出前经过等待时间,则为false

所以在监听InterruptedException之前,您应该检查waitFor()的返回值。

方法返回控件,但进程仍在后台运行-因为您已经指定了超时限制,到那时,您的C程序还没有完成。你自己说这是一个无限循环。

我正在向它传递一个进入无限循环的代码。但该进程从不抛出interruptedException

等待()

文件显示

投掷:InterruptedException-如果当前线程在等待时被另一个线程中断,则等待结束引发了InterruptedException。

您的当前线程没有被任何其他线程中断,因此它不会抛出InterruptedException。

你的程序的行为似乎没有错。

相关内容

  • 没有找到相关文章

最新更新