识别涉及守护进程的祖先/后代

识别涉及守护进程的祖先/后代

有没有一种方法可以通过守护进程来识别强大的祖先/后代进程?考虑这个例子:

  • PID 123 分叉为 PID 124
  • PID 124 调用setsid
  • PID 124 分叉为 PID 125
  • PID 124 退出
  • PID 123 等待 PID 124

我现在如何确定 PID 125 是 PID 123 的后代?显然,父 PID 不起作用(由于 PID 124 退出,父进程将为 1),SID 也不起作用(它将是 124,它已经死亡并被收割,因此没有可用的信息)。

答案1

仅使用数字 ID 字段无法做到这一点。在 Linux 上,可以使用控制组 (cgroup) 来解决这个问题,因为它们是分层的,并且进程无法脱离其 cgroup。

这就是为什么传统的 init 系统没有可靠的方法来确定哪些进程是由特定服务启动的,因此也没有可靠的方法来终止它们,这与依赖 cgroup 来跟踪进程树的 systemd 不同。

相关内容