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

Why is Java.lang.Process not throwing InterruptedException in this code?

此方法通过我的 Java 应用程序使用 ProcessBuilder 运行 外部 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);
    }   

我还注意到方法 returns 控制但进程在后台保持 运行ning。 为什么会这样?

来自Documentation of Process

Returns: true if the subprocess has exited and false if the waiting time elapsed before the subprocess has exited

因此,与其监听 InterruptedException,不如检查 waitFor() 的 return 值。

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

我正在向它传递一个进入无限循环的代码。但是这个过程永远不会抛出 interruptedException.

waitFor()

文档说

Throws: InterruptedException - if the current thread is interrupted by another thread while it is waiting, then the wait is ended and an InterruptedException is thrown.

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

您的程序的行为似乎没有错误。