微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何closuresWindows上的Javasubprocess标准输出文件描述符,而后代仍然存在

给定一个简单的batch filec1.bat,其中包含:

start notepad 1> nul 2> nul exit

一个Java程序:

import java.io.InputStream; public class Processtest { public static void main(String[] args) throws Exception { ProcessBuilder b = new ProcessBuilder(); b.command("c1.bat"); Process p = b.start(); new Thread(new ProcDrain(p)).start(); System.out.println("Parent process finished: " + p.waitFor()); } private static class ProcDrain implements Runnable { private final Process p; private ProcDrain (Process p) { this.p = p; } @Override public void run() { try { InputStream in = p.getInputStream(); while (in.read() >= 0) { } System.out.println("Inputstream drainer finished"); } catch (Exception e) { throw new RuntimeException(e); } } } }

执行c1.bat的第一个进程立即结束了另一个进程(记事本)。 然而,排水线程在read()调用中被阻塞,并且在记事本closures之前不会终止。 这表明记事本保持打开原始进程的stdout文件描述符,尽pipebatch file已经redirect了它。

有没有一些方法让batch fileclosuresstdout / stderr文件描述符,以便一旦生成的进程实际退出,drainer线程不会在read()上阻塞?

PHP进程内存和cpu使用率(Windows)

如何在VB6中执行进一步的代码之前等待shell进程完成

在C#中运行命令行参数

variables获取Windows目录在x64位版本?

Linux:我可以在不使用任何IPC(pipe道等)的情况下读取另一个进程的输出吗?

读取subprocess的输出尽快有一些可用?

为Windows x64预编译的sqlite二进制文件

在同一进程中创build的所有其他线程之后停止线程

VBS Windows 64位/ 32位registry读取问题

查看Tomcatsubprocess的详细信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐