代码之家  ›  专栏  ›  技术社区  ›  LiteFine Dev

如何使用linux屏幕启动多个JAR?

  •  2
  • LiteFine Dev  · 技术社区  · 7 年前

    我想从Java运行时在linux中启动一些JAR。

    > screen -S jar1
    > java -jar Something1.jar
    > Ctrl + AD
    > screen -S jar2
    ...
    

    我如何使用Java做到这一点?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Hugues M.    7 年前

    使用自己的会话启动屏幕&命令,直接分离,可以执行以下操作:

    screen -dmS jar1 bash -c "java -jar jar1.jar"
    

    来自命令行,其中 screen -D 而不是 -d 例如,对于Java,您可能希望能够 waitFor() 在你开始的过程中。
    man screen :

    -d -m 以“分离”模式启动屏幕。这会创建一个新会话,但不会附加到该会话。这对于系统启动脚本很有用。
    -D -m

    具有2个虚拟长时间运行命令的示例:

    % screen -dmS app-top top
    
    % screen -dmS app-foo bash -c "while sleep 1; do date; done"
    
    % screen -ls
    There are screens on:
            25377.app-foo   (08/30/2017 09:26:24 AM)        (Detached)
            24977.app-top   (08/30/2017 09:23:41 AM)        (Detached)
    

    过程树:

    SCREEN -dmS app-foo bash -c while sleep 1; do date; done
     \_ bash -c while sleep 1; do date; done
        \_ sleep 1
    SCREEN -dmS app-top top
     \_ top
    

    private Process runInScreen(String sessionName, String command) throws IOException {
        return new ProcessBuilder("screen", "-DmS", sessionName, "bash", "-c", command).inheritIO().start();
    }