我正在从JAVA ProcessBuilder调用一些EXE(7za.exe,pg_basebackup.exe,...)。它在2或3天内没有任何问题(EXE将每天调用)。之后,EXE不断崩溃。
7za.exe错误:
退出代码:: -1.073.741.502Windows事件日志错误:
错误应用程序名称: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位)
答案 0 :(得分:0)
所以我同意上面的评论,要求提供更多细节以确定此问题的根本原因(问题发生时的进程数,实例的指标等)。一般来说,我认为如果你可以避免它,从java调用可执行文件是一种反模式。在这种情况下,我建议您尝试使用类似7-zip binding的内容替换对可执行文件的调用。
这可以让您更好地了解底层流程的执行方式,并将在JVM下移动流程的所有权和管理。