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 进程或附加一个 &
我想通过 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 进程或附加一个 &