如何在Java中检测外部进程崩溃?

时间:2014-09-07 03:21:05

标签: java crash external-process

我正在开发一个需要启动进程并等待其输出的应用程序。有时这个过程会崩溃(很多时候),但由于我有缓解任务,所以不是真正的问题。问题是Windows检测到进程崩溃并提示用户输入,要么在线检查解决方案,要么只是关闭程序。

The dialog

我尝试通过等待提交到Runnable的{​​{1}}中的流程完成并使用返回的ExecutorService指定超时来解决此问题。速度并不是应用程序真正关心的问题,外部进程应该运行几秒钟。

这是我正在使用的代码:

Future

上面的代码运行良好,但崩溃对话框仍然弹出,没有用户交互就不会消失。

This question提出了类似的问题,但从.Net的角度来看 建议通过Windows注册表来抑制弹出窗口,这是我无法做到的,因为它的影响对于机器中的所有进程都是全局的。

  • 有没有办法阻止对话框显示?

  • 有没有办法检测应用程序崩溃并直接处理它 从Java而不需要用户交互?

其他详情:

  • 我没有外部流程的来源。
  • 外部进程是基于控制台的应用程序(即没有GUI。)
  • 最好是我正在寻找基于纯Java的解决方案(没有JNI。)

谢谢。

1 个答案:

答案 0 :(得分:0)

如前所述,您应该使用SetErrorMode win32调用。它不会改变整个系统,只适用于你的过程和它的孩子(这显然是你想要的)。 正确的电话似乎是:

SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);

另请参阅MSDN文档: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx

问候。