2013-10-09 72 views
0

我们从一个Servlet启动一个外部进程。Servlet启动外部进程

try { 
    Process proc = Runtime.getRuntime().exec("java -jar " + jarLocation); 
  • 该servlet并用相同的用户ID /密码的外部进程访问相同的数据库。

  • 该小服务器确实不等待为外部过程完成。

  • 该servlet在不到一秒内完成其“处理”。

  • 从Servlet启动时,外部应用程序至少需要两分钟才能完成。

  • 当在独立模式下运行外部应用程序大约需要5秒钟才能完成。

我们尝试在外部进程启动后停止Web应用程序,这导致外部进程立即完成。

因此,Servlet和外部进程之间似乎存在某种相互作用,导致进程花费很长时间才能完成。我们一直在试图弄清楚几天内会发生什么,并且已经无处可逃。

有没有人知道这里会发生什么?

+0

布赖恩,感谢您的回复。捕获流程输出是所有工作都需要的。 – user903724

回答

2

您需要在servlet进程中使用衍生进程的stdout/stderr。

否则生成的进程可能会阻止等待它被使用。这样做有一点复杂 - 请参阅this answer及其linked article了解更多信息。

请注意,您应该执行Process.waitFor()来收集产生的进程退出代码。否则,你的手上会有一个僵尸。因此,你可能想将所有这些包装在一个单独的线程中,这样你的servlet就可以产生进程并立即返回。尽管如此,如果你启动了一个新的Java进程,你不能简单地重构它,这样你就可以在同一个JVM中把它称为库函数吗?产卵过程是一个相对重的和耗时的任务。

相关问题