繁体   English   中英

ProcessBuilder创建的Java进程之间的通信

[英]Communication between Java processes created by ProcessBuilder

我有一个程序(主类),它创建一个新进程并使用 BufferedReader 从它接收消息(消息通过 ProcessTest 中的 System.out 发送)。

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        ProcessBuilder pb = new ProcessBuilder("java", "com.company.ProcessTest");
        pb.directory(new File("some path"));
        Process p = pb.start();

        try (var reader = new BufferedReader(
                new InputStreamReader(p.getInputStream()))) {

            String line = null;
            while (true) {
                if (!reader.ready()) {    
                    Thread.sleep(500);
                } else {
                    line = reader.readLine();
                    System.out.println(line);
                }

            }
        }
    }
}

public class ProcessTest {
    public static void main(String[] args) throws InterruptedException, IOException {
        System.out.println("Hello from ProcessTest");
    }
}

但是,我还需要从 Main 向 ProcessorTest 发送消息,但不知道该怎么做。 我有一个在 Main 中使用 BufferedWriter 的想法,但不知道它是否可以工作以及是否可以在 ProccessTest 中接收消息:

var writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
writer.write("Some message");
writer.newLine();
writer.flush();

也许有人通过重定向标准 output 知道什么是正确的通信方式???

当一个进程运行另一个进程时,就有两个进程。 父进程使用 ProcessBuilder 创建和启动Process

这个过程有标准输入、标准错误和标准输出,如下所示:

命名可能看起来很奇怪。 但是stdin是子进程读取的stream,所以它是父进程的OutputStream。 等等。

如果您尝试使用 BufferedWriter 使用 flush() 来确保消息被实际发送并且不会占用缓冲区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM