进程所有者与进程用户(Gnome 的系统监视器)

Roj*_*ojo 6 gnome process-management

Gnome 的系统监视器在进程选项卡中有一个“用户”列。还有一个“所有者”列(默认情况下似乎是隐藏的)。

大多数进程在两列上具有相同的值。然而,有些人没有。

我想知道每列到底显示什么,以及两者之间有什么区别。

str*_*gee 5

systemd 是一个全新的 init 系统(我相信它已经有 4 年历史了)。然而,systemd 包含的不仅仅是 PID 1。具体来说,它恰好包括 ConsoleKit 的替代品,这是管理 TTY 会话、X11 会话的旧软件,实际上只是一般的登录。systemd 对 ConsoleKit 的替代称为 logind,并且具有许多优点(例如,多座终于成为可能,我不确定的其他事情等)。

现在,systemd <3cgroup秒。一个不少cgroups,又名进程控制组,是 systemd 如何跟踪哪些进程属于哪个抽象“服务” 1。理解您的问题的关键是logind对用户也是如此:每个用户会话都有自己的内核“会话”,它由 - 你猜对了 - 支持cgroup。为什么?因为这样内核就能够在用户之间适当地管理资源。仅仅因为一个用户正在运行很多进程并不意味着她应该获得更多的 CPU 时间。但是对于cgroups,每个cgroup人在处理器上获得相同的时间,因此每个用户获得相同的资源。

好的,现在我们完成了背景。准备好?鉴于上述构建,您的问题的实际答案非常平淡无奇:无论如何,流程“所有者”都对应于启动流程的人。在技​​术层面上,这是由用户会话跟踪的,由cgroup. 进程“用户”是传统意义上的“用户”:进程在其下运行的身份(以及与该身份相关联的一切,尤其是权限)。

这是一个示例:您登录到 GNOME 并启动一个终端。运行 GNOME Shell 和 GNOME 终端以及gnome-session组成 GNOME 的所有其他程序的进程以用户身份运行:您(因为您已提供凭据并已登录)并且它也归您所有(因为这是您的错,所以可以说,流程开始了)。现在让我们说你sudo -u例如nobody。您现在正在运行一个假定为 的进程nobody,但在更高的抽象级别上,该进程仍然由您启动,并且仍然附加到您的会话2。此级别由您的用户cgroup3跟踪,这决定了您是“所有者”这一事实。

1:以Apache为例。当 Apache 启动时,它有一个主进程来控制一切,但它也会产生一堆子进程。Apache 主进程实际上不做任何工作:它只是指导子进程,而这些进程是完成所有工作的进程。(这样做的原因有很多。)Apache“服务”的抽象概念不能直接映射到“Apache”进程的具体概念这一事实给像systemd这样的服务管理器带来了问题。这就是cgroups 的用武之地:主要的、原始的 Apache 进程被置于一个控制组中,然后无论它做什么,它都不能。这意味着 Apache 服务的抽象概念现在可以直接映射到“永远逃脱cgroupcgroup ”。

2 : 查看/proc/$pid/sessionid以获取有关进程的内核会话的一些信息,该进程$pid的 PID在哪里。

3:你可以了解一个过程的详细信息,cgroup通过采取偷看/proc/$pid/cgroup,其中$pid是,再次,有问题的进程的PID。