您需要使您的线程成为守护线程。
setDaemon(true)启动前使用。
commandLineThread.setDaemon(true);
守护程序线程是不会阻止JVM退出的线程。看到以下问题:Java中的Daemon线程是什么?有关守护程序线程的更多信息。
编辑:
通过注释判断,即使JVM即将退出,您也需要运行该命令。我假设
command变量包含您要运行的脚本?您可以进行两项更改,以使程序按我认为的方式运行。
- 从bash开始
-c
执行命令,然后不必将东西发送到输出流。 - 在启动等待输出的线程之前,先启动进程。
结果代码如下所示:
public void runCommandLine(String directory) throws IOException { ProcessBuilder processBuilder = new ProcessBuilder( "/bin/bash -c " + command); processBuilder.directory(new File(directory)); Process process = processBuilder.start(); Thread commandLineThread = new Thread(() -> { try { printStream(process.getErrorStream(), true); printStream(process.getInputStream(), true); } catch (IOException ex) { ex.printStackTrace(); } }); commandLineThread.setDaemon(true); commandLineThread.start(); System.out.println("Task Dispatched");}


