簡體   English   中英

從java中的ProcessBuilder調用時,EXE崩潰

[英]EXE crash when calling from ProcessBuilder in java

我正在從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
報告編號: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-在-憑據?論壇= CLR
如何在java中實現它?

編輯2:Java作為服務運行(使用包裝器
Java版本:1.0.051
Windows版本:Windows Server 2012和R2(64位),Windows 7(64位),Windows 8(64位)

所以我同意上面的評論,要求提供更多細節以確定此問題的根本原因(問題發生時的進程數,實例的指標等)。 一般來說,我認為如果你可以避免它,從java調用可執行文件是一種反模式。 在這種情況下,我建議你嘗試用7-zip綁定替換對可執行文件的調用。

這應該可以讓您更好地了解底層流程的執行方式,並在JVM下移動流程的所有權和管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM