执行生成长时间运行的子进程的程序时,确保子进程即使在主进程结束后仍保持活动状态至关重要进程重新启动或终止。使用命令行,这可以通过将 exec.Command 对象的 Setsid 标志设置为 true 来实现。这会将子进程与父进程的会话和进程组分离,使其继续独立运行。
但是,当通过 systemd 启动主进程时,服务配置文件中的默认 KillMode 设置可能会干扰脱离过程。默认情况下,systemd 的 KillMode 设置为 control-group,这意味着当主进程停止时,单元控制组内的所有进程都会终止。
解决此问题并允许子进程在主进程中存活终止时,需要修改 systemd 服务文件中的 KillMode 设置。
要更改 KillMode 设置,请编辑位于 /etc/systemd/system/exectest.service 的 systemd 服务文件,并在 [Service] 部分中添加以下行:
KillMode=process
将 KillMode 设置为进程可确保仅杀死主进程本身当装置停止时。这可确保子进程不受影响并继续独立运行。
进行更改后,保存文件并使用以下命令重新启动 systemd 服务:
sudo systemctl daemon-reload sudo systemctl restart exectest
要验证子进程是否在父进程终止后继续存在,请使用以下命令步骤:
以上是如何确保子进程在 systemd 中的父进程终止后继续存在?的详细内容。更多信息请关注PHP中文网其他相关文章!