目录
在 Systemd 中分离子进程
修改 Systemd 服务文件
验证子进程的生存情况
首页 后端开发 Golang 如何确保子进程在 systemd 中的父进程终止后继续存在?

如何确保子进程在 systemd 中的父进程终止后继续存在?

Dec 25, 2024 am 08:24 AM

How to Ensure Child Processes Survive Parent Process Termination in systemd?

在 Systemd 中分离子进程

执行生成长时间运行的子进程的程序时,确保子进程即使在主进程结束后仍保持活动状态至关重要进程重新启动或终止。使用命令行,这可以通过将 exec.Command 对象的 Setsid 标志设置为 true 来实现。这会将子进程与父进程的会话和进程组分离,使其继续独立运行。

但是,当通过 systemd 启动主进程时,服务配置文件中的默认 KillMode 设置可能会干扰脱离过程。默认情况下,systemd 的 KillMode 设置为 control-group,这意味着当主进程停止时,单元控制组内的所有进程都会终止。

解决此问题并允许子进程在主进程中存活终止时,需要修改 systemd 服务文件中的 KillMode 设置。

修改 Systemd 服务文件

要更改 KillMode 设置,请编辑位于 /etc/systemd/system/exectest.service 的 systemd 服务文件,并在 [Service] 部分中添加以下行:

KillMode=process

将 KillMode 设置为进程可确保仅杀死主进程本身当装置停止时。这可确保子进程不受影响并继续独立运行。

进行更改后,保存文件并使用以下命令重新启动 systemd 服务:

sudo systemctl daemon-reload
sudo systemctl restart exectest

验证子进程的生存情况

要验证子进程是否在父进程终止后继续存在,请使用以下命令步骤:

  1. 使用 ps -ef | 检查正在运行的进程grep exectest:这应该显示在 systemd 用户下运行的主进程(exectest),并且子进程(exectest child)仍然处于活动状态。
  2. 终止父进程:向主进程发送信号(例如 sudo kill -INT ) 来终止它。
  3. 验证子进程是否存活:重新运行 ps -ef | grep exectest 检查子进程是否仍在运行。如果子进程一直处于活动状态,则服务文件修改成功。

以上是如何确保子进程在 systemd 中的父进程终止后继续存在?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驱动投资研究,做出更明智的决策

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Go 接口:非强制实现下的必要性 Go 接口:非强制实现下的必要性 Sep 09, 2025 am 11:09 AM

Go 语言的接口虽然不强制类型显式声明实现,但它们在实现多态和代码解耦方面仍然至关重要。通过定义一组方法签名,接口允许不同的类型以统一的方式进行处理,从而实现灵活的代码设计和可扩展性。本文将深入探讨 Go 接口的特性,并通过示例展示其在实际开发中的应用价值。

如何确定 Go 构建过程中参与编译的文件? 如何确定 Go 构建过程中参与编译的文件? Sep 09, 2025 am 11:57 AM

本文旨在帮助开发者了解如何在 Go 项目中确定哪些文件会被编译和链接,尤其是在存在特定于系统的文件时。我们将探讨两种方法:使用 go build -n 命令解析输出,以及利用 go/build 包的 Import 函数。通过这些方法,您可以清晰地了解构建过程,并更好地管理您的项目。

您如何在Golang读写文件? 您如何在Golang读写文件? Sep 21, 2025 am 01:59 AM

Goprovidessimpleandefficientfilehandlingusingtheosandbufiopackages.Toreadasmallfileentirely,useos.ReadFile,whichloadsthecontentintomemorysafelyandautomaticallymanagesfileoperations.Forlargefilesorincrementalprocessing,bufio.Scannerallowsline-by-liner

解决 Go WebSocket EOF 错误:保持连接活跃 解决 Go WebSocket EOF 错误:保持连接活跃 Sep 16, 2025 pm 12:15 PM

本文旨在解决在使用 Go 语言进行 WebSocket 开发时遇到的 EOF (End-of-File) 错误。该错误通常发生在服务端接收到客户端消息后,连接意外关闭,导致后续消息无法正常传递。本文将通过分析问题原因,提供代码示例,并给出相应的解决方案,帮助开发者构建稳定可靠的 WebSocket 应用。

在 Go 程序中启动外部编辑器并等待其完成 在 Go 程序中启动外部编辑器并等待其完成 Sep 16, 2025 pm 12:21 PM

本文介绍了如何在 Go 程序中启动外部编辑器(如 Vim 或 Nano),并等待用户关闭编辑器后,程序继续执行。通过设置 cmd.Stdin、cmd.Stdout 和 cmd.Stderr,使得编辑器能够与终端进行交互,从而解决启动失败的问题。同时,展示了完整的代码示例,并提供了注意事项,帮助开发者顺利实现该功能。

Golang中使用的空结构{}是什么 Golang中使用的空结构{}是什么 Sep 18, 2025 am 05:47 AM

struct{}是Go中无字段的结构体,占用零字节,常用于无需数据传递的场景。它在通道中作信号使用,如goroutine同步;2.用作map的值类型模拟集合,实现高效内存的键存在性检查;3.可定义无状态的方法接收器,适用于依赖注入或组织函数。该类型广泛用于表达控制流与清晰意图。

Golang Web服务器上下文中的中间件是什么? Golang Web服务器上下文中的中间件是什么? Sep 16, 2025 am 02:16 AM

MiddlewareinGowebserversarefunctionsthatinterceptHTTPrequestsbeforetheyreachthehandler,enablingreusablecross-cuttingfunctionality;theyworkbywrappinghandlerstoaddpre-andpost-processinglogicsuchaslogging,authentication,CORS,orerrorrecovery,andcanbechai

如何从Golang中的文件中读取配置 如何从Golang中的文件中读取配置 Sep 18, 2025 am 05:26 AM

使用标准库的encoding/json包读取JSON配置文件;2.使用gopkg.in/yaml.v3库读取YAML格式配置;3.结合os.Getenv或godotenv库使用环境变量覆盖文件配置;4.使用Viper库支持多格式配置、环境变量、自动重载等高级功能;必须定义结构体保证类型安全,妥善处理文件和解析错误,正确使用结构体标签映射字段,避免硬编码路径,生产环境推荐使用环境变量或安全配置存储,可从简单的JSON开始,需求复杂时迁移到Viper。

See all articles