为什么我的桌面应用程序是 PID1 的子级

为什么我的桌面应用程序是 PID1 的子级

我正在使用 启动我的图形应用程序i3bar。当我使用 来查看系统的进程树时pstree,我可以看到我的图形应用程序(Firefox、Chromium、Termite 等)都是systemd(PID1) 的子级,而不是i3bar.i3bar既然他们是由它发起的,他们不应该是它的孩子吗?

答案1

查看 i3bar 源代码,当 i3bar 启动一个新应用程序时,它似乎会执行以下操作:

  1. fork()
  2. 打电话给设置PGID,新组 id = 0(请参阅联机帮助页上有关此行为的注释)
  3. execl()

因此,新的子进程应该与 i3bar 具有相同的父进程,因为它被提升到父进程的进程组。

您可以通过检查 i3bar 实例的进程组 ID 来验证这一点。例如:

ps axo pid,ppid,pgid,sid,comm | grep i3bar
# See 3rd column

如果 i3bar 也是 init 的子级,那么这可以解释您所看到的行为。

相关内容