【问题标题】:How to invoke sh shell with file using Runtime.getRuntime().exec?如何使用 Runtime.getRuntime().exec 调用带有文件的 sh shell?
【发布时间】:2013-07-25 12:43:51
【问题描述】:

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

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

【问题讨论】:

标签: java runtime.exec processbuilder


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    用途:

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

    【讨论】:

      【解决方案3】:

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

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

      1. ProcessBuilder 启动外部脚本
      2. 外部脚本使用 Linux 命令nohup(1) 为内部脚本创建一个分离的进程。例如:`nohup xterm -e /bin/bash "script.sh &"

      nohup 切断新 X 终端和 Java 进程之间的连接。 & 将整个内容发送到后台,因此该命令直到 xterm 退出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-08
        • 2021-09-14
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 1970-01-01
        • 2017-11-06
        相关资源
        最近更新 更多