gpt4 book ai didi

java - 如何使用 linux screen 启动多个 jar?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:18 28 4
gpt4 key购买 nike

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

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

我如何使用 Java 完成此操作?

最佳答案

要启动一个有自己的 session 和命令的 screen ,直接分离,你可以这样做:

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

这是来自命令行,其中 screen 将派生一个在后台执行的新进程,因此在运行上述命令后,您将回到交互式 shell。但是在另一个程序中,您将使用 -D 而不是 -d,例如对于 Java,您可能希望能够在你开始的过程。
来自 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 个虚拟长时间运行命令的示例:

% 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();
}

关于java - 如何使用 linux screen 启动多个 jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954942/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com