Java 启动流程并离开

Java 启动流程并离开,java,node.js,Java,Node.js,我们可以从JavaRESTAPI启动nodejs/phantomjs脚本吗 我试过这个: rt = Runtime.getRuntime(); p = rt.exec("node /extra/POC/index.js 14"); p.waitFor(); 它可以启动,但我的java进程一直在运行,直到我的脚本执行使用p.waitFor()完成为止 我的脚本内部有执行process.exit

我们可以从JavaRESTAPI启动nodejs/phantomjs脚本吗

我试过这个:

rt = Runtime.getRuntime();                                                    
p = rt.exec("node /extra/POC/index.js 14");
p.waitFor();
它可以启动,但我的java进程一直在运行,直到我的脚本执行使用
p.waitFor()完成为止
我的脚本内部有执行
process.exit()的条件
Java应该只调用脚本并保留它,让
index.js
脚本处理剩余的作业。

的Java文档

如有必要,使当前线程等待,直到此进程对象表示的进程终止。如果子流程已终止,则此方法立即返回。如果子进程尚未终止,调用线程将被阻塞,直到子进程退出

因此,请删除此语句,让流程继续(并结束)。同样从文档中,您可以看到当
进程
准备“垃圾收集”时会发生什么

当不再有对流程对象的引用时,不会终止子流程,而是子流程继续异步执行


不知道主线程结束时发生了什么。但这条线索似乎回答了这个问题

您的代码执行您要它执行的操作—等待子进程退出

如果您只关心触发一个“子进程”;然后只需删除对
waitFor()
的调用。然后父进程将继续执行“它的事情”;什么都不用等


唯一需要记住的是:如果父进程(JVM)在子进程之前结束,则结束的父进程也可能结束子进程。

那么为什么要
waitFor()
脚本结束?删除waitFor()@幽灵猫这是第一次;)我浪费了时间先评论;)是的,正如在标准java程序中测试的,进程在主方法上终止,我需要从jersey rest api开始运行node js脚本的子进程,所以如果我的客户端调用我的rest api,那么我应该以运行node js脚本的状态“Success”响应。我们将测试这部分。谢谢你的意见。@GhostCat这个建议我会遵照执行的@斯诺夫蒂:我不确定我什么都懂,但这应该没问题。用一个简单的脚本(.bat或.sh)在几秒钟后创建一个文件很容易检查。Java只是开始和结束。