Javaservlet启动外部进程
我们正在从Servlet启动一个外部进程
try {
Process proc = Runtime.getRuntime().exec("java -jar " + jarLocation );
servlet和外部进程使用相同的userid/pwd访问相同的数据库
servlet不会等待外部进程完成
servlet在不到一秒钟的时间内完成其处理
从Servlet启动时,外部应用程序至少需要两分钟才能完成
在单机模式下运行时,外部应用程序大约需要5秒钟才能完成
我们尝试在外部进程启动后停止web应用程序,这导致外部进程立即完成
因此,Servlet和外部进程之间似乎存在某种相互作用,导致该进程花费的时间太长而无法完成。几天来,我们一直在试图找出可能发生的事情,但一无所获
有人知道这里会发生什么吗
# 1 楼答案
您需要在servlet进程中使用生成的进程的stdout/stderr
否则,生成的进程可能会阻塞,等待它被使用。这样做有点复杂——更多信息请参见this answer及其linked article
注意,您应该执行
Process.waitFor()
来收集生成的进程退出代码。否则你的手上会有一个僵尸。因此,您可能希望将所有这些都打包到一个单独的线程中,这样您的servlet就可以生成进程并立即返回话虽如此,如果您要启动一个新的Java进程,您不能简单地重构它,以便从同一个JVM中将其作为库函数调用吗?产卵过程是一项相对较重且耗时的任务