在 Linux 上,如何检查进程及其线程的 CPU 亲和性?
答案1
这很简单。 收集所有进程 ID 和线程 ID,然后调用程序taskset
。 喜欢,
taskset -cp 2
taskset -cp 4
…
按进程名称打印所有内容
taskset
有--all-tasks
可选参数
taskset --all-tasks -p $(pgrep java)
对于某些进程,--all-tasks
似乎没有打印所有子进程(在我的测试中,它没有打印子进程kthreadd
,我不确定为什么会这样)。
按进程名称打印所有帮助脚本
这是一个简短的 Linux shell 脚本,用于按名称打印进程及其所有子线程的 CPU 亲和力。
#!/usr/bin/env bash
set -eu
pname=${1:-kthreadd} # default to 'kthreadd'
for pid in $(pgrep "${pname}"); do
echo "PID: ${pid} (${pname})"
for tid in $(pgrep -P "${pid}" | tr '\n' ' '); do
taskset -cp "${tid}"
done
done
输出
PID: 2 (kthreadd)
pid 4's current affinity list: 0
pid 6's current affinity list: 0
pid 7's current affinity list: 0
pid 8's current affinity list: 0
…
在 Ubuntu 12、bash 4 上测试。