如何在 linux 终端中使用Runtime.getRuntime().exec
java 调用 sh 文件?
我想从 java 代码调用新终端中的 sh 文件。如果我只在终端中运行它,它会作为一个单独的进程运行,即使我的程序退出也不会关闭。这就是我不使用的原因ProcessBuilder
,如果使用它的程序退出,它会停止它调用的进程。
如何在 linux 终端中使用Runtime.getRuntime().exec
java 调用 sh 文件?
我想从 java 代码调用新终端中的 sh 文件。如果我只在终端中运行它,它会作为一个单独的进程运行,即使我的程序退出也不会关闭。这就是我不使用的原因ProcessBuilder
,如果使用它的程序退出,它会停止它调用的进程。
如果您的脚本被标记为可执行文件 ( chmod +x script.sh
),您可以通过 调用它exec("./script.sh")
。否则,您可以直接使用exec("sh script.sh")
.
利用:
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "sh myfile.sh" });
由于ProcessBuilder
只是一个薄包装Runtime
,直接使用它不会做你想要的。
相反,您需要编写第二个脚本,将终端窗口创建为后台进程并分离该进程。一般的做法:
ProcessBuilder
启动外部脚本nohup
切断新 X 终端和 Java 进程之间的连接。&
将整个事情发送到后台,所以命令直到xterm
退出。