[英]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.