如何使用Runtime.getRuntime()。exec调用sh shell和文件?

时间:2013-07-25 12:43:51

标签: java runtime.exec processbuilder

如何在java中使用Runtime.getRuntime().exec在linux终端中调用sh文件?

我想从java代码调用新终端中的sh文件。如果我在终端中运行它,它只作为一个单独的进程运行,即使我的程序退出也不会关闭。这就是为什么我没有使用ProcessBuilder,如果使用它的程序退出,它会停止由它调用的进程。

3 个答案:

答案 0 :(得分:0)

如果您的脚本被标记为可执行文件(chmod +x script.sh),则可以exec("./script.sh")调用它。否则,您可以使用exec("sh script.sh")直接调用它。

答案 1 :(得分:0)

使用:

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "sh myfile.sh" });

答案 2 :(得分:0)

由于ProcessBuilder只是Runtime的一个薄包装,直接使用它不会做你想要的。

相反,您需要编写第二个脚本,该脚本将终端窗口创建为后台进程并分离此进程。一般方法:

  1. ProcessBuilder启动外部脚本
  2. 外部脚本使用Linux命令nohup(1)为内部脚本创建分离进程。例如:`nohup xterm -e / bin / bash“script.sh&”
  3. nohup削减了新X终端和Java进程之间的连接。 &将整个内容发送到后台,因此命令不会在xterm退出。