2017-12-11 8 views
7

JAVA ProcessBuilderからいくつかのEXE(7za.exe、pg_basebackup.exe、...)を呼び出しています。 2〜3日間は問題なく動作しています(EXEは毎日呼び出されます)。その後、EXEは絶えずクラッシュしています。JavaのProcessBuilderから呼び出すときにEXEがクラッシュする

7za.exe error:
Exit code :: -1.073.741.502

Windows Event log error:
Faulting application name: 7za.exe, version: 9.20.0.0, time stamp: 0x4ce553f5 Faulting module name: KERNELBASE.dll, version: 6.2.9200.21941, time stamp: 0x5792e533
Exception code: 0xc0000142
Fault offset: 0x000683ba
Faulting process id: 0x10bc
Faulting application start time: 0x01d2cebdff3bb05a
Faulting application path: EXEpath\bin\7za.exe
Faulting module path: KERNELBASE.dll
Report Id: 3d27046a-3ab1-11e7-93fe-00505680156e
Faulting package full name:
Faulting package-relative application 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(); 

スニペット。 メモリリークまたはOSレベルのエラーはありますか?お知らせ下さい。

ありがとうございます。

編集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サーバー2012 R2(64ビット)、Windows 7の(64ビット版)、Windowsの8(64ビット版)

+0

あなたのパスは少し変わっているようです: 'EXEpath \ bin \ 7za.exe'?たぶんあなたはあなたが持ってはいけない場所に何かを誤って入力したかもしれません:-) – Ivonet

+0

その場所は無視してください。それは実際の場所ではありません。 –

+0

exesは手動で起動すると機能しますか? (ダブルクリックすることにより) – Asoub

答えて

0

だから私は、この問題の根本的な原因の問題が発生したプロセスの(数、インスタンスのメトリックなど)を識別するために、追加の詳細を求める上記のコメントに同意します。一般的に言えば、私はあなたがそれを避けることができれば、Javaから実行可能ファイルを呼び出すことは反パターンであると主張します。この場合、実行可能ファイルへの呼び出しを7-zip bindingのように置き換えることをお勧めします。

これは、基礎となるプロセスがどのように実行されているかをより深く理解し、JVMの下でプロセスの所有権と管理を移動するためのものです。

関連する問題