Gnome

程序所有者與程序使用者(Gnome 的系統監視器)

  • May 28, 2014

Gnome 的系統監視器在程序選項卡中有一個“使用者”列。還有一個“所有者”列(預設情況下似乎隱藏)。

大多數程序在兩列上具有相同的值。然而,有幾個沒有。

我想知道每列到底顯示了什麼,兩者之間有什麼區別。

systemd 是一個全新的初始化系統(我相信它已經有 4 年的歷史了)。然而,systemd 包含的遠不止 PID 1。具體來說,它恰好包含了 ConsoleKit 的替代品,後者是管理 TTY 會話、X11 會話以及實際上只是一般登錄的舊軟體。systemd 對 ConsoleKit 的替代品稱為 logind,並且具有許多優點(例如,最終可能實現多席位,其他我不太確定的事情等)。

現在,systemd <3 cgroups。很多。_ cgroups,又名程序控制組,是 systemd 跟踪哪些程序屬於哪個抽象“服務” 1的方式。理解您的問題的關鍵在於,logind它也為使用者執行此操作:每個使用者會話都有自己的核心“會話”,它由 - 你猜對了 - 一個cgroup. 為什麼?因為這樣核心就能夠在使用者之間適當地管理資源。僅僅因為一個使用者正在執行很多程序並不意味著她應該獲得更多的 CPU 時間。但是使用cgroups,每個*cgroup*人在處理器上獲得相同的時間,因此每個使用者都獲得相同的資源。

好的,現在我們完成了背景。準備好?考慮到上述情況,您的問題的實際答案是非常平淡無奇的:流程“所有者”對應於啟動流程的人,無論如何。在技​​術層面上,這是由使用者會話跟踪的,由cgroup. 程序“使用者”是傳統意義上的“使用者”:程序在其下執行的身份(以及與該身份相關的所有內容,尤其是權限)。

這是一個範例:您登錄 GNOME 並啟動一個終端。執行 GNOME Shell 和 GNOME 終端的程序以及gnome-session構成 GNOME 的所有其他內容都以使用者身份執行:您(因為您已提供憑據並登錄)並且它也歸您所有(因為這是您的錯,所以可以說,程序開始了)。現在讓我們說你sudo -u到 eg nobody。您現在正在執行一個假定身份為 的程序nobody,但在更高的抽象級別上,該程序仍由您啟動,並且仍附加到您的會話2。此級別由您的使用者cgroup3跟踪,這決定了您是“所有者”這一事實。

1:以Apache為例。當 Apache 啟動時,它有一個主程序來控制一切,但它也會產生一堆子程序。主 Apache 程序實際上並不做任何工作:它只是指導子程序,而這些程序才是完成所有工作的程序。(這樣做的原因有很多。)Apache“服務”的抽象概念不能直接映射到“該”Apache程序的具體概念,這給systemd這樣的服務管理器帶來了問題。這就是cgroups 的用武之地:主要的、原始的 Apache 程序被放置在一個控制組中,然後無論它做什麼,它都無法逃脫cgroup. 這意味著Apache服務的抽象概念現在可以直接映射到“Apache cgroup”的具體概念。

2:查看/proc/$pid/sessionid以獲取有關程序的核心會話的一​​些資訊,該程序$pid的 PID 在哪裡。

3cgroup :您可以通過查看來了解有關程序的更多資訊/proc/$pid/cgroup,其中$pid又是相關程序的 PID。

引用自:https://unix.stackexchange.com/questions/132291