JAVA创建子进程并处理waitFor() 阻塞问题
2024-08-24 19:09:07
虽然很想休息,但是想想还是要把今天学的东西记下来,不然以后再用还是新知识。
新建一个线程类读取子进程的汇报信息和错误信息,避免阻塞
class StreamGobbler extends Thread
{
InputStream is;
String type; 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)
System.out.println(type + ">" + line);
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
创建子进程的RUN方法
//cmd命令
String s = "I:/OpenModelica-v1.9.7/bin/omc.exe "+courseFile+"/modelica/tcs.mos"; //执行cmd命令
Process proc = Runtime.getRuntime().exec(s); //接收子进程的汇报信息和错误信息,避免阻塞
new StreamGobbler(proc.getInputStream(),"INFO").start();
new StreamGobbler(proc.getErrorStream(),"ERROR").start(); //获取子进程执行结果状态
int status=proc.waitFor();
if (status == 0){
System.out.println(n+"执行完毕");
detect(n);
}else
System.out.println(n+"执行失败"); //销毁子进程
proc.destroy();
注:JAVA进程waitFor() 阻塞总结参照博客https://blog.csdn.net/jinhao2003/article/details/2136919
最新文章
- 解决SmartGit序列号问题
- OAuth2 Backend Web Application 验证过程
- SQL:实现流水账的收入、支出、本期余额
- Django- 分页
- Bumped Map And Normal Map
- C# 中的virtural和abstract
- 通过Percona XtraBackup添加一个slave
- Eclipse+Selenium自动化测试脚本设计V1.0
- android120 zhihuibeijing 开机页面
- uva 352 - The Seasonal War
- CentOS-6.3安装配置JDK-7或 JDK-6
- [NOIP2011] 聪明的质监员 二分+前缀和
- 《从零玩转JavaWeb+项目实战》-系列课堂录制计划
- Nginx (三) 使用Keepalived搭建高可用服务
- 从.Net到Java学习第十一篇——SpringBoot登录实现
- Jenkins不能及时更新svn到最新代码
- 牛客练习赛A 【BFS】
- Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)
- DUAL PORT RAM应用实例
- P5057 [CQOI2006]简单题(线段树)