Kernel
方括號中的程序是否以與其他程序相同的方式調度?
ps(1)
,使用該-f
選項,將輸出方括號中沒有相關命令行的程序,如下所示:UID PID PPID C STIME TTY TIME CMD root 1 0 0 Aug28 ? 00:07:42 /sbin/init root 2 0 0 Aug28 ? 00:00:01 [kthreadd] root 3 2 0 Aug28 ? 00:00:00 [rcu_gp] root 4 2 0 Aug28 ? 00:00:00 [rcu_par_gp] root 6 2 0 Aug28 ? 00:00:00 [kworker/0:0H-kblockd] root 8 2 0 Aug28 ? 00:00:00 [mm_percpu_wq] root 9 2 0 Aug28 ? 00:02:14 [ksoftirqd/0] root 10 2 0 Aug28 ? 00:05:33 [rcu_preempt] root 11 2 0 Aug28 ? 00:01:36 [rcuc/0] root 12 2 0 Aug28 ? 00:00:00 [rcub/0] root 13 2 0 Aug28 ? 00:00:07 [migration/0] root 14 2 0 Aug28 ? 00:00:00 [idle_inject/0] root 16 2 0 Aug28 ? 00:00:00 [cpuhp/0] root 17 2 0 Aug28 ? 00:00:00 [cpuhp/1] root 18 2 0 Aug28 ? 00:00:00 [idle_inject/1] root 19 2 0 Aug28 ? 00:00:05 [migration/1] root 20 2 0 Aug28 ? 00:00:55 [rcuc/1]
這些程序是否像其他程序一樣被調度?
在 Linux 下,為每個程序在以 pid 命名的目錄中處理
ps
核心top
提供的資訊。/proc
這包括兩個文件,comm
和cmdline
;comm
是程序的命令名稱,並且cmdline
是程序的命令行,即提供給它的參數(包括它自己的“名稱”)。ps
並top
使用方括號來區分兩者:如果程序有命令行,則args
欄位(也稱為CMD
)輸出;否則它會輸出命令名稱,並用方括號括起來。這在手冊頁中有描述
ps
,用於args
:有時程序 args 將不可用;發生這種情況時,
ps
將改為在括號中列印執行檔名稱。沒有程序參數的程序包括沒有任何命令行(甚至沒有
argv[0]
)構造的程序,例如核心執行緒,以及失去了命令行的程序,即失效程序,也稱為殭屍程序(可通過<defunct>
後綴辨識)。這些都不會改變調度屬性:所有程序都以相同的方式調度,根據它們的狀態、優先級等。