【问题标题】:Is it possible to double-fork a process in Java?是否可以在 Java 中对进程进行双分叉?
【发布时间】:2010-01-27 23:40:26
【问题描述】:

我需要对 vmware 进行双重分叉,这样它就不会继承终端 ID (TTY/pts)。

这是我目前所拥有的,但我无法访问 runtime.exec 进程以派生另一个进程(删除终端 ID)。

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("vmware");

有没有办法在 Java 中“守护”?

【问题讨论】:

    标签: java linux fork daemon


    【解决方案1】:

    您需要编写一个小型 C 或 C++ 程序来执行额外的 fork、setsid 等所有操作。

    【讨论】:

    • +1 - 请注意,Java 不明确支持这一点的原因是相关概念是特定于操作系统的。
    • 好吧,我就是这么想的,我只是想确保没有更好的方法。
    • Shell 脚本、perl、python 等也可以。
    【解决方案2】:

    为了让您的生活更轻松,您基本上需要通过关闭隐式连接到当前终端的输入/输出流来断开应用程序与外壳的连接。

    为了让您自己更简单,请查看akuma 项目。这将是纯 Java 中更简洁的解决方案,无需任何 C 包装器。

    这里有一个blog post 讨论它。

    【讨论】:

      【解决方案3】:

      您实际上不需要“双叉”来执行此操作,只需要单叉。然后孩子应该关闭标准输入、输出、错误并开始一个新会话。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        相关资源
        最近更新 更多