java - 如何向子进程发送命令

标签 java subprocess multiprocessing processbuilder

我正在创建一个模拟系统,其中包含一个使用 ProcessBuilder 创建多个进程的测试工具。我希望能够向单独的进程发送多个命令,并且我只想到了几个选项 - 这两个选项看起来都不是很有趣。

第一种方法是使用套接字在父进程和子进程之间进行通信,这就是子进程相互通信的方式。另一种是使用 Writer 方法,我一直在使用 Reader 方法来读取和打印每个进程的输入流。我认为这两者都需要类似水平的簿记。理想情况下,像调用任何子类那样调用函数会很好,但我知道这不是多进程的工作方式。

请告诉我您认为实现此目的的最佳方法是什么!

谢谢, 大卫

更新:我最终在测试工具中创建了一个与所有子进程通信的服务器套接字。系统设置完毕后,就像将消息添加到队列中一样简单,然后将其发送到正确的客户端。

最佳答案

此答案是对您的陈述的回应:

"Ideally it would be nice to call a function like you would for any subclass, but I know that just isn't how multi-process works."

如果您愿意,如果子进程是在 JVM 上运行的 Java 程序,您可以实际执行以下操作:

使用Remote Method Invocationwikipedia article有一个 RMI 服务器和客户端的小示例。

本质上,它的工作原理如下:

  1. 服务器通过远程方法、实现“远程接口(interface)”(其定义也应该可供客户端使用)来提供一些服务
  2. 当服务器启动时,它会创建一个实现服务的对象实例,并将其“绑定(bind)”到“RMI 注册表”
  3. 客户端在“RMI 注册表”中查找要调用其方法的远程对象,并获取一个似乎实现了远程接口(interface)的对象。
  4. 然后客户端可以调用该对象的方法,RMI 运行时确保调用到达远程对象,并返回结果。

这似乎是一个“官方”Hello World 示例: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html

调用的参数必须是可序列化(以便它们可以通过网络传输)。通常,这应该像将 implements Serialized 附加到其类型定义中一样简单。

关于java - 如何向子进程发送命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485707/

相关文章:

java - 如何在 Java 中创建我的数组的数组? (没有数组列表)

python - Python如何获取手册页内容?

python - 如何使用 joblib 并行化缓存函数

java - 将哈希字节数组转换为字符串

java - JPQL内连接查询

java - 如何将字节数组转换为字符串数组而不进行任何转换

.exe 中的 Python 子进程

python - check_output 的参数太长?失败并出现错误 127

python - 为什么 multiprocessing.Process 可与内部函数配合使用,而 multiprocessing.Pool 则不能?

python - 大数据多处理