java多进程中waitFor()的作用
来源:互联网 发布:java房卡麻将游戏源码 编辑:程序博客网 时间:2024/06/08 03:24
在项目中遇到这样的情况:在项目中引入子进程,发现子进程并没有成功运行完成,看不到输出信息不知道怎么回事。度娘后发现问题在于子进程的标准输出流占满缓冲池导致进程阻塞,需要另开两个进程在waitFor()之前将子进程的标准输出流和错误流从缓冲池中取走。具体原因见http://blog.csdn.net/jimzhai/article/details/7864806
从缓冲池读取子进程标准输出和错误流的线程:
public class StreamGobbler extends Thread { InputStream is; String type; public StreamGobbler(InputStream is, String type) { this.is = is; this.type = type; } public void run() { try { InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { if (type.equals("Error")) { System.out.println("Error :" + line); } else { System.out.println("Debug:" + line); } } } catch (IOException ioe) { ioe.printStackTrace(); } }}
对子进程p,创建两个读取子进程缓冲区输出流和错误流的线程,并在waitFor()之前读取出来:
public class ClearOutputAndErrorStream { public void clearProcessOutputstream(Process p) throws InterruptedException { //p.getInputStream() : Returns the input stream connected to the normal output of the subprocess. //The stream obtains data piped from the standard output of the process represented by this Process object. StreamGobbler outstream = new StreamGobbler(p.getInputStream(), "Output"); //p.getErrorStream() : Returns the input stream connected to the error output of the subprocess. //The stream obtains data piped from the error output of the process represented by this Process object. StreamGobbler errorstream = new StreamGobbler(p.getErrorStream(), "Error"); outstream.start(); errorstream.start(); p.waitFor(); }}
Process p = Runtime.getRuntime().exec("java -cp ./lib/*;./bin test.TestDemo");coaes.clearProcessOutputstream(p);
0 0
- java多进程中waitFor()的作用
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()的问题
- Java Process中waitFor()
- JAVA进程waitFor() 阻塞总结
- java process的waitfor()
- java Process的waitFor()
- Java Process 的 waitFor()
- java Process的waitFor()
- java Process的waitFor()
- 调用Process.waitfor导致的进程挂起
- ictclas,ansj,结巴分词,StanfordNLP中文分词以及所用词性标注集
- 我为什么喜欢go语言
- A. Duff and Meat
- ajax上传form表单或者文件以及结合validate验证
- JEE行业命名规范
- java多进程中waitFor()的作用
- 如何解决Android sdk tool的下载不成功的问题
- ubuntu 安装jdk
- bzoj3892: [Usaco2014 Dec]Marathon
- 类之间互相引用
- git和github在ubuntu上的使用
- 寄存器、RAM、ROM、Flash相关概念区别整理
- 剑指offer第三十题【连续子数组的最大和】c++实现
- 【编译原理】概述总结(一)