首页 > 解决方案 > 防止linux子进程在父进程终止时终止

问题描述

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

在我的 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-servicejava 应用程序中,我启动了一个子进程(另一个 java 应用程序),我需要在停止后保持它运行。my-service

问题是,当我运行systemctl stop my-service子进程时也终止了。

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

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

有人可以提供一个想法如何解决这个问题?

标签: java

解决方案


我在这里找到了解决方案。

我刚刚更改了我的服务描述单元,添加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

推荐阅读