是否可以在Java中对一个进程进行双重分叉?

时间:2010-01-27 23:40:26

标签: java linux fork daemon

我需要双分割vmware,因此它不会继承终端ID(TTY / pts)。

这是我到目前为止所做的,但我无法访问runtime.exec进程来分叉另一个进程(删除终端ID)。

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

有没有办法在Java中“daemonize”?

3 个答案:

答案 0 :(得分:4)

你需要编写一个小的C或C ++程序来做额外的fork,setsid,所有这些。

答案 1 :(得分:1)

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

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

以下是blog post讨论它。

答案 2 :(得分:1)

为了做到这一点,你实际上并不需要“双叉”,只需要一个叉子。然后孩子应该关闭stdin,out,error并开始一个新的会话。