【问题标题】:Java ProcessBuilder daemon process redirect output to file without terminating process after exiting jvmJava ProcessBuilder守护进程将输出重定向到文件而不在退出jvm后终止进程
【发布时间】:2019-08-04 15:28:14
【问题描述】:

我想通过 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 是一个 Web 服务器,应该永远运行。但是,当我退出生成服务器的 java 进程时,它也会终止。

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

使用 nohup 前置参数并没有改变这种行为,使用:

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

我也试过

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

这两个都不起作用,无论是在 windows 还是 linux 上

【问题讨论】:

标签: java background-process processbuilder


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多