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

cra*_*tua 3 fork systemd

我感兴趣的是 systemd 如何跟踪主进程存在后剩余的主进程的子进程?

Umu*_*mut 7

Systemd 为此使用 cgroup。在启动使用服务文件定义的任何可执行文件之前,systemd 会创建一个 cgroup 并将可执行文件放入其中[*]。此后,cgroup 中的进程有多少个子进程或 fork 多少次都不再重要。对于systemd来说,它们都属于同一个cgroup。

另一件值得知道的好事情是,当父进程终止时,该父进程的子进程将继承 PID 1 (systemd) 作为其父进程。这是unix规则。

[ ] 系统首先创建一个cgroup。然后自行分叉并将新进程放入此 cgroup 中。然后调用exec ()族调用你的服务的ExecStart=二进制文件。