在 Linux 上,如何检查进程及其线程的 CPU 亲和性?

在 Linux 上,如何检查进程及其线程的 CPU 亲和性?

在 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 上测试。

相关内容