如何使用Type=fork跟踪fork进程的systemd

3
我很感兴趣并想知道systemd如何跟踪主进程后仍存在的子进程?

1
你的意思是“在父进程退出后”吗? - Umut
@Umut 没错,感谢指出这个错误。 - crashtua
1个回答

7

Systemd使用cgroups执行此操作。在启动任何使用服务文件定义的可执行文件之前,systemd创建一个cgroup并将可执行文件放入其中[*]。之后,无论有多少子进程或者该cgroup中的进程分叉了多少次,对于systemd来说,它们都属于同一个cgroup。

另一个需要知道的好处是,当父进程退出时,父进程的子进程会继承PID 1(systemd)作为它们的父进程。这是Unix规则。

[] 首先,系统创建一个cgroup。然后fork自身并将新进程放入该cgroup中。接着,调用您服务的ExecStart=二进制文件的exec()函数族。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接