【问题标题】:Java - C-Like Fork?Java - C-Like Fork?
【发布时间】:2010-09-22 04:55:36
【问题描述】:

是否可以使用新的独立 jvm 进程在 java 中进行“C 类”分叉?

怎么做?

【问题讨论】:

  • 也许您可以更详细地了解您要完成的工作?如前所述,您可以 exec() 另一个进程,它可能是 JVM 的另一个实例,但这不会为您提供与 C 中的 fork() 相同的状态共享。另一方面,您可以运行线程,但是与 fork() 相比,您可以获得更多的共享。
  • 我只是想避免线程暗示的共享。感谢您的关注:)

标签: java c fork


【解决方案1】:

这个答案可能有点晚了,但是:

http://akuma.kohsuke.org/

似乎正是您要找的东西

【讨论】:

  • 它似乎并不是真正的 fork,而是 exec 的新子进程以一种像 fork 一样带来一些好处的方式。
  • 请注意,它仅适用于类似 POSIX 的系统(大致上除了 Windows 之外的所有系统)
  • 您可以阅读 Akuma 的源代码,并像 akuma 一样使用 JNA 使用 posix API。
  • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
【解决方案2】:

有趣的是,我正在研究这个:一个运行其他 Java 进程的 Java 进程。我使用文章 From Runtime.exec() to ProcessBuilder 作为坚实的基础,并使用 When Runtime.exec() won't 作为如何吞噬输出流的好建议。

PS.:对于那些想知道的人,我不得不这样做(而不是产生新线程),因为还有另一个 Java 进程正在检查这些进程的存在,这些进程通常使用 shell 命令单独运行。

【讨论】:

  • 那些只是指Runtime.exec(),这与在fork()之后能够显式控制孩子完全不同。
  • 您能否更新答案并修复 ProcessBuilder 的链接?
  • 链接已失效 :(
  • 这是一个旧答案,但如果您仍想获取信息,请使用 Wayback Machine 访问这些旧文章。还是搜索较新的?
【解决方案3】:

Application Isolation API (JSR 121) 引入了Isolate,它解决了这个用例。

【讨论】:

  • 目前(1.8)JDK不支持隔离API。有一个实验性的 MVM(多任务虚拟机)项目,但它没有在主线中找到它的方式。此外,在我看来,隔离 API 不允许进行分叉,其中分叉过程的状态被克隆到子进程中:据我所知,隔离以 main 方法开始,并且(当然) 不同的隔离不共享状态。
猜你喜欢
  • 2012-06-06
  • 1970-01-01
  • 2018-06-16
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2023-03-16
相关资源
最近更新 更多