防止Linux子进程在父进程终止时终止

时间:2019-10-17 20:35:09

标签: java

父进程终止后,我需要保持子进程运行。

在我的Ubuntu 18(系统D)上,我创建了一个服务来将我的 java 应用程序作为服务运行。

要启动它,我使用:

systemctl start my-service

这是my-service服务单元的定义:

[Unit]
Description=Java Linux Service
After=syslog.target

[Service]
User=root
WorkingDirectory=/root
ExecStart=/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -jar /root/my-service.jar
RestartForceExitStatus=2

[Install]
WantedBy=multi-user.target

在此my-service Java应用程序中,我启动一个子进程(另一个Java应用程序),并且需要在my-service之后停止。

问题在于,当我运行systemctl stop my-service时,子进程也被终止

我尝试使用nohup命令启动子进程,但我的Java代码未成功:

Runtime.getRuntime().exec("houp java -jar child.jar");

有人可以提供解决方案的想法吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决方法here

我刚刚更改了服务描述单元,添加了KillMode=process

[Unit]
Description=Java Linux Service
After=syslog.target

[Service]
User=root
WorkingDirectory=/root
ExecStart=/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -jar /root/linux-service.jar
RestartForceExitStatus=2
KillMode=process

[Install]
WantedBy=multi-user.target