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

How to start multiple jars using linux screens?

我想在 linux 中从 Java 运行时启动一些 jar。 从 Linux 的命令行看起来像这样:

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

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

要使用自己的会话和命令启动屏幕,直接分离,您可以这样做:

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

这是来自命令行,其中 screen 将分叉一个在后台执行的新进程,因此在 运行 以上内容之后您将返回到交互式 shell。但是在另一个程序中,您将使用 -D 而不是 -d,例如对于 Java,您可能希望能够在您开始的过程中使用 waitFor()
来自 man screen:

-d -m Start screen in "detached" mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts.
-D -m This also starts screen in "detached" mode, but doesn't fork a new process. The command exits if the session terminates.

带有 2 个虚拟 long-运行 命令的示例:

% 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

所以从 Java 开始,像这样:

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