java 创建进程_用Java创建操作系统进程

示例代码:

public void start() throws Exception {

String separator = System.getProperty("file.separator");

String classpath = System.getProperty("java.class.path");

String path = System.getProperty("java.home")

+ separator + "bin" + separator + "java";

ProcessBuilder processBuilder =

new ProcessBuilder(path, "-cp",

classpath,

AnotherClassWithMainMethod.class.getName());

processBuilder.redirectErrorStream(true);

Process process = processBuilder.start();

process.waitFor();

}

以上可知,ProcessBuilder启动进程时更加灵活,能设置classPath等参数。

其中redirectErrorStream方法,如果将值设置为 true,标准错误将与标准输出合并,这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。反之,子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。

另外,JVM与新起的进程之间会建立三个管道连接:标准输入,标准输出和标准错误流。假设该程序不断在向标准输出流和标准错误流写数据,而JVM不读取的话,当缓冲区满之后将无法继续写入数据,最终造成阻塞。waitFor方法就是一直等到该 Process 对象表示的进程终止,该方法才返回。

http://stackoverflow.com/questions/3263130/processbuilder-start-another-process-jvm-howto

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值