taskset命令用于绑定进程到指定cpu核心,通过修改cpu亲和性实现,支持启动绑定(如taskset -c 2 ./app)、运行时修改(taskset -p -c 0,2 5678)及掩码设置(如0x6),并需权限与验证。

Taskset 命令可以将进程绑定到一个或多个指定的 CPU 核心上运行,适用于性能调优、避免缓存抖动、隔离关键服务等场景。它通过修改进程的 CPU 亲和性(CPU affinity)实现,底层依赖 Linux 的 sched_setaffinity() 系统调用。
查看当前进程的 CPU 亲和性
使用 taskset -p <pid></pid> 可查看某进程当前绑定的 CPU 核心:
-
taskset -p 1234输出类似pid 1234's current affinity mask: f,其中f是十六进制掩码,对应二进制1111,表示该进程可在 CPU 0–3 上运行 - 掩码每一位代表一个 CPU 核心:最低位(bit 0)为 CPU 0,bit 1 为 CPU 1,以此类推;支持最多 64 个核心(64 位掩码)
- 也可用
ps -o pid,psr,comm -p <pid></pid>查看进程当前实际运行在哪个核心(psr列)
启动时绑定新进程到指定核心
在执行命令前加 taskset,即可让程序从启动起就受限于指定 CPU:
- 绑定到单个核心(如 CPU 2):
taskset -c 2 ./myapp - 绑定到多个核心(如 CPU 0 和 CPU 3):
taskset -c 0,3 ./myapp - 使用十六进制掩码(如仅允许 CPU 1 和 CPU 2):
taskset 0x6 ./myapp(因为0x6 = 0110₂,对应 bit1 和 bit2) - 加
-a参数可同时作用于所有线程(对多线程程序更稳妥):taskset -ac 1,2 ./myapp
运行中动态修改已有进程的 CPU 绑定
对已运行的进程,可用 taskset -p 重新设置其亲和性:
- 将 PID 5678 限制在 CPU 0 和 CPU 2:
taskset -c 0,2 5678 - 等价写法(十六进制):
taskset -p 0x5 5678(0x5 = 0101₂) - 注意:普通用户只能修改自己启动的进程;修改其他用户或系统进程需 root 权限
- 若进程正在执行敏感操作(如内核态长时间运行),可能短暂失败,可重试
验证绑定是否生效及常见注意事项
绑定后建议立即验证效果,避免配置未生效:
- 用
taskset -p <pid></pid>再次确认掩码值是否更新 - 持续观察
top -H -p <pid></pid>,按f添加P(Last CPU used)列,检查各线程是否落在预期核心 - 若进程是多线程且未显式设置线程亲和性,主线程绑定不影响子线程默认调度——必要时需在代码中用
pthread_setaffinity_np()单独设置 - CPU 数量以
lscpu | grep "^CPU(s):"或nproc为准;虚拟机中需确认 vCPU 分配情况











