Linux-Kernel
Linux cgroups:任務與 pid?
a
task
和 a 和有什麼不一樣pid
?在裡面/sys/fs/cgroup
有一個名為的文件tasks
,它只列出了 pid,$ ls /sys/fs/cgroup/*/tasks /sys/fs/cgroup/blkio/tasks /sys/fs/cgroup/net_cls,net_prio/tasks /sys/fs/cgroup/cpuacct/tasks /sys/fs/cgroup/net_cls/tasks /sys/fs/cgroup/cpu,cpuacct/tasks /sys/fs/cgroup/net_prio/tasks /sys/fs/cgroup/cpuset/tasks /sys/fs/cgroup/perf_event/tasks /sys/fs/cgroup/cpu/tasks /sys/fs/cgroup/pids/tasks /sys/fs/cgroup/devices/tasks /sys/fs/cgroup/rdma/tasks /sys/fs/cgroup/freezer/tasks /sys/fs/cgroup/systemd/tasks /sys/fs/cgroup/memory/tasks
lsns
還提供了一個選項,
-p
,--task pid
僅顯示具有此 pid 的程序持有的命名空間。為什麼 cgroups 呼叫 pid 的任務?有區別嗎?
在 cgroups v1 中,程序和 任務之間存在區別。在這個視圖中,一個程序可以包含多個任務(從使用者空間的角度來看,通常稱為執行緒,在本手冊的其餘部分中稱為執行緒)。在 cgroups v1 中,可以獨立操作程序中執行緒的 cgroup 成員資格。
在某些情況下,cgroups v1 跨不同 cgroup 拆分執行緒的能力會導致問題。例如,它對記憶體控制器沒有意義,因為一個程序的所有執行緒共享一個地址空間。由於這些問題,在最初的 cgroups v2 實現中刪除了在程序中獨立操作執行緒的 cgroup 成員資格的能力,隨後以更有限的形式恢復(見下文“執行緒模式”的討論)。