首页/系统/Linux 运维命令速查/taskset 绑定 CPU 亲和性
进程与作业69 条

taskset 绑定 CPU 亲和性

把进程绑定到指定 CPU 核:taskset -c 0,1 cmd 启动时绑定、-pc 调整运行中进程;隔离折腾任务/验证单核性能时用。

Linux 运维命令速查系统更新于 2026-10-13

taskset 绑定 CPU

taskset 属于 util-linux,用来设置或查看进程的 CPU 亲和性,也就是允许它跑在哪几个核上。它的价值在于把互相干扰的任务分开:把计算密集任务固定到指定核,避免它到处抢占;或者把某个进程限制在一颗核上,观察单核条件下的真实性能。它只控制「能在哪些核上运行」,不改变优先级。

基本信息

适用平台Linux(util-linux),容器内可用范围受资源限制约束
语法taskset -c 核列表 命令;taskset -pc 核列表 进程号
编号规则CPU 编号从 0 开始,可用区间与枚举写法
查看方式不给命令只给进程号即打印当前亲和性

典型使用场景

  • 把性能测试任务固定在指定核上,减少核间迁移带来的波动
  • 让多个批处理任务分核运行,避免互相抢占同一颗核
  • 排查某进程是否被限制在少数核上导致吞吐不足
  • 验证单线程程序在单核条件下的最大能力
  • 配合中断与队列设置,把特定负载隔离到独立核

常用示例

常用示例
taskset -c 0-3 ./bench.sh             # 只允许使用 0 到 3 号核
taskset -c 0,2 ./worker                # 允许使用 0 号与 2 号核
taskset -pc 2 1234                     # 把已在运行的进程钉到 2 号核
taskset -p 1234                        # 查看该进程当前的亲和性掩码
taskset -c 0-3 ./bench.sh > out.log 2>&1 &   # 后台运行并保留输出
nproc; lscpu | grep On-line            # 先确认可用核数与在线核范围

核列表写法

写法含义说明
0只使用 0 号核单核绑定时最直观
0-3使用 0 到 3 号核区间写法,闭区间
0,2使用 0 号与 2 号核枚举写法,适合跨 NUMA 的场景
0x3掩码形式,等价于 0 与 1 号核老脚本里常见,可读性差
查看模式输出十六进制掩码与进程号掩码需换算才能对应到核编号
绑定不是加速手段:单线程任务被钉在单核上反而可能因为邻居任务干扰而变慢,先做对照测试再决定策略。

使用与验证

  • 绑定前后各跑一次基准测试,用数据确认有效果
  • 结合进度与负载观察进程是否真的只落在指定核上
  • 容器内先确认可用的核范围,再按容器视角编号绑定
  • 绑定只是限制范围,不能阻止其他进程抢占同一颗核
  • 需要同时控制内存本地性时,考虑更完整的 NUMA 绑定方案
亲和性会被子进程继承:给一个脚本绑定后,它启动的所有任务都会在同样的核集合内运行,评估影响面时要考虑这一点。

易错点

  • 绑核不是性能魔法,单线程任务钉单核可能因核间干扰变慢,必须用对照测试验证
  • 容器内可见核数少于宿主机,掩码按容器视角计算,照搬宿主编号会失败或无效
  • 只限制范围不等于独占,同核上的其他进程照样会抢时间片
  • 绑定会沿进程树继承,包装脚本时容易连带限制了整批任务而不自知

数据来源与参考

  • man 1 taskset(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌