如果我直接从命令行启动特定进程,我会看到它在 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 服务器。
谢谢,
祝你今天过得愉快