Process的Waitfor() 引起代码死锁

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Process的Waitfor() 引起代码死锁相关的知识,希望对你有一定的参考价值。

Java用process调用c#的exe后,process.waitfor(). exe执行会停在某处。据说是waitfor引起的exe子线程死锁。

先存一个链接 http://yearsaaaa123789.iteye.com/blog/1404865

关键引用

因为本地的系统对标准输入和输出所提供的缓冲池有效,所以错误的对标准输出快速的写入何从标准输入快速的读入都有可能造成子进程的所,甚至死锁。好了,问题的关键在缓冲区这个地方:可执行程序的标准输出比较多,而运行窗口的标准缓冲区不够大,所以发生阻塞。接着来分析缓冲区,哪来的这个东西,当Runtime对象调用exec(cmd)后,JVM会启动一个子进程,该进程会与JVM进程建立三个管道连接:标准输入,标准输出和标准错误流。假设该程序不断在向标准输出流和标准错误流写数据,而JVM不读取的话,当缓冲区满之后将无法继续写入数据,最终造成阻塞在waitfor()这里。 

 

以上是关于Process的Waitfor() 引起代码死锁的主要内容,如果未能解决你的问题,请参考以下文章

Process.waitFor()、线程和 InputStreams

Process.waitFor()、Runtime.getRuntime().exec方法的问题,代码如下

Process.waitFor()方法的返回值

Process.waitFor()方法的返回值

Process.waitFor()方法的返回值

Process.waitFor()方法的返回值