taskset命令可快速绑定进程到指定cpu核心,临时使用用taskset -c,长期运行建议通过systemd的cpuaffinity持久化配置,并结合top/htop验证实际运行核。

直接用 taskset 命令就能为关键业务进程绑定指定 CPU 核心,操作简单、生效快,适合大多数场景。如果需要长期稳定运行或配合系统服务管理,则建议结合 systemd 或 cpuset 进行持久化配置。
查看可用 CPU 核心与当前进程状态
先确认系统实际可用的逻辑 CPU 编号:
- 执行
lscpu | grep "CPU(s):"或nproc查总核数 - 运行
cat /proc/cpuinfo | grep -E "processor|cpu cores|physical id" | head -20看编号分布(注意:processor字段值即为逻辑 CPU ID,从 0 开始) - 查已有进程当前亲和性:
taskset -cp PID(输出如0-3,6表示允许在 CPU 0/1/2/3/6 上运行) - 查进程当前实际运行在哪颗核:
ps -o pid,psr,comm -p PID(psr列显示最近使用的 CPU 编号)
启动时绑定新进程到指定核心
适用于脚本启动、测试或临时部署的关键服务:
- 只在 CPU 2 上运行:
taskset -c 2 ./critical_app - 在 CPU 0 和 CPU 4 上运行:
taskset -c 0,4 ./critical_app - 在连续核心区间(如 0–3)运行:
taskset -c 0-3 ./critical_app - 对多线程程序确保所有线程生效,加
-a参数:taskset -ac 1,3 ./multi_thread_app
运行中动态修改已有进程绑定
无需重启服务即可调整,但需注意权限限制:
- 将 PID 为 5678 的进程限制在 CPU 1 和 CPU 5:
taskset -pc 1,5 5678 - 等价掩码写法(CPU 1 和 5 对应 bit1 和 bit5 → 0x22):
taskset -p 0x22 5678 - 普通用户只能改自己启动的进程;改系统进程或他人进程需 root 权限
- 若命令返回 “Operation not permitted”,检查是否被 seccomp 或容器限制拦截
持久化绑定(推荐用于生产服务)
避免重启后失效,尤其适用于 systemd 管理的守护进程:
- 编辑服务单元文件,如
/etc/systemd/system/myapp.service - 在
[Service]段添加:CPUAffinity=0 2 4(空格分隔,不支持逗号) - 若需跨节点组合(如 NUMA 节点 0 和 2),可写多行:
CPUAffinity=0 1和CPUAffinity=8 9,systemd 自动取并集 - 重载并重启:
sudo systemctl daemon-reload && sudo systemctl restart myapp
验证绑定是否真正生效,不能只看 taskset 输出——要持续观察 top -H -p PID 中各线程的 P(Last CPU used)列,或用 htop 开启“CPU”列直观查看。对于高实时性要求的业务,还可配合 numactl 绑定内存节点,进一步减少跨 NUMA 访问延迟。











