2012-01-04 158 views
2

我有一个主要应用程序启动另外两个进程,我只需要启动他们作为一个独立的进程。像运行它们 - 自己而不使用或共享我的主应用程序启动程序进程内存或CPU。如何从Java执行完全独立的应用程序。像独立进程

但是,当我启动它像这样两个其他进程不会被执行(以及他们创建两个新进程,但不是虚构的),除非我杀死主进程。我的计划是在windows下执行它,就像执行THREE应用程序的THREE命令提示符一样。

我该如何解决它,以便三次执行完全独立运行?

/*This is Process 1 itself*/ 
try { 

    if (myStock.getOs().equals("Linux")) 
    { 
    Runtime.getRuntime().exec("java -cp /var/dist/test.jar main.main");   
    Runtime.getRuntime().exec("java -cp /var/dist/test.jar www.webserver_starter"); 

    } else { 

    /*Windows 7 only*/ 
    String WindowsTemp = System.getenv("MY") + "\\"; 
    /*This is Process 2*/ 
    Runtime.getRuntime().exec("java -cp " + WindowsTemp + "dist\\test.jar main.main");   
    /*This is Process 3*/ 
    Runtime.getRuntime().exec(
     "java -cp " + WindowsTemp + "dist\\test.jar www.webserver_starter"); 
    } 

} catch(Exception e) { 
    System.out.println(e); 
} 

回答

6

对于的Windows使用cmd /c start ...其中'...'是你想调用命令。

Runtime.getRuntime().exec("cmd /c start java -cp /var/dist/test.jar main.main") 

对于Linux的在命令的末尾添加&启动一个守护进程。

+2

你也可以使用ProcessBuilder来完成同样的事情。 – Mitch 2012-01-04 15:52:15

+0

@Wojtek O .:我尝试了你刚刚在Windows 7 PC上解释的方式。和我没有'cmd/c start '一样的确切问题' – YumYumYum 2012-01-04 15:54:25

+0

它正在工作。 'cmd/c start'是我们想要在任务管理器中看到的,也是在任务栏中看到的。如果没有'cmd/c start',它会执行相同的工作,但它会隐藏终端+任务栏,当有人需要启动一个中央应用程序并同时启动许多(在我的情况下)。两者似乎都在起作用。非常感谢。 – YumYumYum 2012-01-04 19:14:58