Linux
Linux:如何知道哪些程序被固定到哪個核心?
有沒有辦法知道哪些核心目前有一個固定到它們的程序?
甚至其他使用者執行的程序也應該在輸出中列出。
或者,是否可以嘗試將程序固定到核心,但如果所需的核心已經固定了一個程序,則會失敗?
PS:感興趣的程序必須已固定到給定的核心,而不僅僅是目前在給定的核心上執行
PS:這不是重複,另一個問題是如何確保一個程序獨占一個CPU。在這裡,我們詢問如何檢測一個程序被固定到給定的核心(即使用了 cpuset,而不是如何使用它)。
在正常情況下,Linux 程序不會顯式地固定到給定的核心,通常沒有理由這樣做,但這是可能的。
taskset
您可以使用帶有“psr”欄位的 ps來管理程序關聯或查看目前在哪個 CPU 上執行的程序。檢查程序 27395 的目前 CPU 親和性:
$ ps -o psr 27395 PSR 6
檢查程序 27395 的關聯列表:
$ taskset -pc 27395 pid 27395's current affinity list: 0-7
設置程序 27395 與 CPU 3 的親和性
$ taskset -pc 3 27395 pid 27395's current affinity list: 0-7 pid 27395's new affinity list: 3
檢查程序 27395 的目前 CPU 親和性:
$ ps -o psr 27395 PSR 3
要檢查是否有任何程序被固定到任何 CPU,您可以遍歷程序標識符並
taskset -p
針對它們執行:$ for pid in $(ps -a -o pid=); do taskset -pc $pid 2>/dev/null; done pid 1803's current affinity list: 0-7 pid 1812's current affinity list: 0-7 pid 1986's current affinity list: 0-7 pid 2027's current affinity list: 0-7 pid 2075's current affinity list: 0-7 pid 2083's current affinity list: 0-7 pid 2122's current affinity list: 0-7 pid 2180's current affinity list: 0-7 pid 2269's current affinity list: 0-7 pid 2289's current affinity list: 0-7 pid 2291's current affinity list: 0-7 pid 2295's current affinity list: 0-7 pid 2300's current affinity list: 0-7 pid 2302's current affinity list: 0-7 pid 3872's current affinity list: 0-7 pid 4339's current affinity list: 0-7 pid 7301's current affinity list: 0-7 pid 7302's current affinity list: 0-7 pid 7309's current affinity list: 0-7 pid 13972's current affinity list: 0-7
首先打開終端並
cat /proc/cpuinfo
列出所有核心。核心 0 = 第一核心,核心 1 = 第二核心……然後
CORENUM=0 ps -e -o pid,psr,cpu,cmd | grep -E "^[[:space:]][[:digit:]]+[[:space:]]+${CORENUM}"
查看
CORENUM=
分配給它的核心 1(將 0 替換為所需的核心編號)。