Linux

鑑於我們有 API /proc/pid/status 應該/可以 /proc/pid/stat 被棄用嗎?

  • April 16, 2022

我對通過procfs在 GNU/Linux 中可用的程序資訊有一些疑問。這最初是因為希望從應用程序中提取 vmPeak、vmSize、vmRSS 和 vmHWM。

我從一個工作假設開始,即 根據kernel.org的評論,該版本是機器可讀/proc/<pid>/status的人類可讀版本:/proc/<pid>/stat

stat - 程序狀態

status - 人類可讀形式的程序狀態

當我注意到vmPeak只能從/proc/pid/status.

似乎/proc/pid/status實際上結合了來自多個地方的值並添加了一些自己的值。

鑑於我們/proc/pid/status是否有任何理由使用/proc/pid/stat?需要什麼? 為什麼有兩個 API?可能/proc/pid/stat被棄用還是有用?

stat不等價。它提供的欄位較少。它只是稍微容易解析(如果你天真地這樣做,會有一個微妙的錯誤)。任何使用 stat 的程序都可以輕鬆切換到使用狀態。有多少人真的會崩潰?

我剛剛為兩者編寫了解析器(儘管最終我將一個用於 stat ,因為 API 不太有用)。對於機器可讀的內容不多。事實上,“狀態”的解析器最終變得更加優雅,因為您可以將它直接讀入您喜歡的任何類型的鍵值儲存中。狀態似乎更容易從任何語言解析並且可擴展。

有多少程序實際上依賴於“stat”而不是“status”?他們中的任何一個人真的需要這可能提供的微不足道的解析速度嗎?

現在我知道由於向後兼容性,stat 多年來無法刪除,但您可以說“現在已棄用”,除非有充分的理由保留它(這將是我問題的一個可能答案)。

如果性能是一個問題,那麼通過虛擬文件系統將此核心資訊轉換為文本並返回的性能肯定不如庫呼叫的性能。

正如這個答案所暗示的那樣,繼續添加新的 API 可能令人討厭,但鑑於其中大部分是穩定的,為什麼沒有 C 庫 API,例如sysinfo

核心仍然提供/proc/…/stat向後兼容性的原因,不僅是與舊版本的程序 - 如果您procps現在建構實用程序,您最終會得到仍然讀取ps的程序( 、pgreppidof等)。/proc/…/stat

可以想像,可以更改procps為僅使用/proc/…/status; 舊的性能參數不再相關,status從核心中檢索與檢索stat. 但這無助於現有系統在不改變使用者空間工具的情況下需要更新核心。

就核心而言,這是保留stat. 為什麼有一個永不破壞使用者空間的 Linux 核心策略?

您當然可以自由選擇只使用/proc/…/status和完全避免/proc/…/stat。我不知道有任何普遍共識認為後者應該被棄用;我從未見過它被討論過(這並不意味著它沒有被討論過),並且它沒有在手冊procfs核心的過時 ABI 符號(包括/proc條目)中標記為已棄用。也許這只是慣性,如果你在更多核心開發人員可能會注意到的圈子中提出它,那麼顯然存在共識

(請注意,據我所知, 中的某些欄位stat不可用status- 至少是程序組和會話 ID。)

關於sysinfo-style 界面,您總是可以建議一個。基於文本的界面不會消失,不僅是為了保持向後兼容性;以 Unix 風格系統中的許多文本處理工具都可以使用的格式保存這些資訊太方便了,無法擺脫。

https://lkml.org/lkml/2012/12/23/75

WE DO NOT BREAK USERSPACE!

只要存在依賴stat它的舊實用程序/應用程序就不會被刪除,IOW 它很可能永遠不會被刪除。

如果您想使用其中任何一個 - 這是您的選擇。

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