从java中的ProcessBuilder调用时,EXE崩溃

时间:2017-12-11 13:27:36

标签: java windows exe processbuilder

我正在从JAVA ProcessBuilder调用一些EXE(7za.exe,pg_basebackup.exe,...)。它在2或3天内没有任何问题(EXE将每天调用)。之后,EXE不断崩溃。

  

7za.exe错误:
  退出代码:: -1.073.741.502

     

Windows事件日志错误:
  错误应用程序名称:7za.exe,版本:9.20.0.0,时间戳:0x4ce553f5   错误模块名称:KERNELBASE.dll,版本:6.2.9200.21941,时间   标记:0x5792e533
异常代码:0xc0000142
故障偏移:0x000683ba   
故障处理id:0x10bc
故障应用程序启动时间:   0x01d2cebdff3bb05a
故障应用程序路径:   EXEpath \ bin \ 7za.exe
故障模块   路径:KERNELBASE.dll
报告ID:3d27046a-3ab1-11e7-93fe-00505680156e   
错误包裹全名:发送包裹相关申请ID:

代码段

File workingDir = new File(workingDirectory);
ProcessBuilder pb = new ProcessBuilder(argumentsList);
pb.redirectErrorStream(true);
pb.directory(workingDir);        
Process process = pb.start();
BufferedReader commandOutput = new BufferedReader(new 
InputStreamReader(process.getInputStream()));
String s = null;
while ((s = commandOutput.readLine()) != null) {
    print(s);
}
int exitCode = process.exitValue();

在所有运行此代码的机器中也没有发生这种情况。 是内存泄漏还是操作系统级错误?请指教。

提前致谢。

编辑1: c#中的同类错误。它还包含修复。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/cb9a15ed-4401-47f1-8c78-0c63c3da677d/process-returns-0xc0000142-when-started-from-a-windows-service-prividing-the-credentials?forum=clr
如何在java中实现它?

编辑2: Java作为服务运行(使用wrapper
Java版本:1.0.051
Windows版本:Windows Server 2012和R2(64位),Windows 7(64位),Windows 8(64位)

1 个答案:

答案 0 :(得分:0)

所以我同意上面的评论,要求提供更多细节以确定此问题的根本原因(问题发生时的进程数,实例的指标等)。一般来说,我认为如果你可以避免它,从java调用可执行文件是一种反模式。在这种情况下,我建议您尝试使用类似7-zip binding的内容替换对可执行文件的调用。

这可以让您更好地了解底层流程的执行方式,并将在JVM下移动流程的所有权和管理。