2010-01-27 65 views
3

我需要双叉vmware,因此它不会继承终端ID(TTY/pts)。是否有可能在Java中双叉进程?

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

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

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

回答

3

您将需要编写一个小型C或C++程序来完成额外的fork,setsid,所有这些工作。

+1

+1 - 并注意到Java不明确支持这一点的原因是相关概念是特定于操作系统的。 – 2010-01-28 00:11:26

+0

好的,这就是我的想法,我只是想确保没有更好的方法。 – 2010-01-28 01:12:30

+0

Shell脚本,perl,python等也会这样做。 – MarkR 2010-01-28 07:50:47

1

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

为了让自己更简单,请查看akuma项目。这将是纯Java中的一个更干净的解决方案,不需要任何C包装。

这里是一个blog post的讨论。

1

实际上,您并不需要“双叉”,因此只需要一个叉就可以。然后孩子应该关闭标准输出,出错,并开始一个新的会话。

+0

如果可以,请+1。我没有自己测试过。 – Alfred 2010-01-28 08:20:59

+0

看看守护进程()做什么 – MarkR 2010-01-28 12:07:21