如何在java中使用Runtime.getRuntime().exec
在linux终端中调用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
退出。