如何将命令发送到子进程

时间:2012-05-07 16:32:29

标签: java subprocess multiprocessing processbuilder

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

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

请告诉我您认为实施此操作的最佳方法是什么!

谢谢, 大卫

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

1 个答案:

答案 0 :(得分:2)

这个答案是对你的陈述的回应:

  

“理想情况下,调用类似于任何函数的函数会更好   子类,但我知道这不是多进程的工作方式。“

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

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

实质上,这可以通过以下方式工作:

  1. 服务器通过远程方法提供一些服务,实现“远程接口”(客户端的定义也应该可用)
  2. 当服务器启动时,它会创建实现该服务的对象实例,并将其“绑定”到“RMI注册表”
  3. 客户端在“RMI注册表”中查找要调用方法的远程对象,并获取一个似乎实现远程接口的对象。
  4. 然后客户端可以调用此对象上的方法,RMI运行时确保调用将其发送到远程对象,并返回结果。
  5. 这似乎是一个'官方'Hello World示例: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html

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