Java ProcessBuilder 守护进程在退出 jvm 后将输出重定向到文件而不终止进程

Java ProcessBuilder daemon process redirect output to file without terminating process after exiting jvm

我想通过 ProcessBuilder 在 java 中重新创建 java -jar [jar] &>logfile &

这是我当前的代码:

File outFile = new File(".."); // logfile
ProcessBuilder builder = new ProcessBuilder(args);  // args = ["java", "-jar", "[jar]"]
builder.redirectError(outFile);
builder.redirectOutput(outFile);
Process process = builder.start();

所述 jar 是一个网络服务器,应该 运行 永远。但是当我退出生成服务器的 java 进程时,它也被终止。

我现在的问题是:如何告诉 ProcessBuilder 在调用者退出时不会终止的后台线程中执行命令?

在 args 前面加上 nohup 并没有改变这个行为,使用:

args = ["nohup", "java", "-jar", "[jar]"]

我也试过了

args = ["nohup", "java", "-jar", "[jar]", "&"]

这两个都不起作用,在 windows 或 linux

上都不起作用

根据 https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html#tag_16_111_03 如果父进程忽略信号,它们的子进程也会。

所以这里的简单解决方法是用 nohup 启动我的父 java 进程或附加一个 &