我很感兴趣并想知道systemd如何跟踪主进程后仍存在的子进程?
Systemd使用cgroups执行此操作。在启动任何使用服务文件定义的可执行文件之前,systemd创建一个cgroup并将可执行文件放入其中[*]。之后,无论有多少子进程或者该cgroup中的进程分叉了多少次,对于systemd来说,它们都属于同一个cgroup。
另一个需要知道的好处是,当父进程退出时,父进程的子进程会继承PID 1(systemd)作为它们的父进程。这是Unix规则。
[] 首先,系统创建一个cgroup。然后fork自身并将新进程放入该cgroup中。接着,调用您服务的ExecStart=二进制文件的exec()函数族。