コマンド ラインから特定のプロセスを直接開始すると、2 ~ 3 秒で完全に開始されます。
Java プログラムからまったく同じコマンドを使用してまったく同じプロセスを開始すると、親が破棄されない限り、開始時にハングします。なんで?
ProcessBuilder の場合:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File(dir));
Process p = pb.start();
Runtime.exec の場合:
Runtime.getRuntime().exec(cmd, null, new File(dir));
いずれにしても、新しい Process オブジェクトを null に設定せず、すぐにガベージ コレクターを呼び出さないと、新しいプロセスは 3 秒で実行する必要があるのと同じことを実行するのに最大 3 分かかります。
Process p = pb.start();
p = null;
Runtime.getRuntime().gc();
上記のコードを使用すると、問題が修正されます。誰かが私に理由を説明できますか? プロセスが処理するJVMに関連するものだと思いますが、それは単なる推測です。
新しいプロセスは、Hibernate を使用して MySQL DB に接続し、log4j でログファイルを書き込み、.properties ファイルから読み取り、RabbitMQ サーバーに接続します。
ありがとうございました、
ごきげんよう