taskset 用于绑定进程到指定 CPU 核心,分查看(-p、-cp)和设置(-pc、-c、-ca)两类操作,支持范围、列表、步长写法,但不改变调度策略,需注意编号从 0 开始、掩码位序、抢占限制及持久化配置。

Linux 中用 taskset 绑定进程到指定 CPU 核心,核心就两条:查当前亲和性、设新亲和性。它不改调度策略,只是告诉内核“只准在这几个核上跑”,操作简单但效果直接。
查看进程当前绑定的 CPU 核心
执行命令即可获知进程允许运行在哪几个逻辑 CPU 上:
-
taskset -p PID:输出十六进制掩码,例如
pid 1234's current affinity mask: 0x3f(二进制00111111),表示允许在 CPU 0–5 运行; -
taskset -cp PID:更直观,输出类似
pid 1234's current affinity list: 0-5,直接看到编号范围。
对已运行进程动态绑定核心
无需重启服务,实时生效(需 root 或进程属主权限):
- taskset -pc 2,5,7 1234:强制进程 PID 1234 只能在 CPU 2、5、7 上调度;
- taskset -pc 0-3 1234:绑定到连续的前 4 个核心(0、1、2、3);
- taskset -pc 0,4,8-11:2 1234:支持步长写法,等价于 CPU 0、4、8、10。
启动新进程时直接绑定
适用于脚本部署或临时调试,一气呵成:
- taskset -c 1,3 ./myapp:启动 myapp 并立即限制在 CPU 1 和 3;
- taskset -c 0-2 /usr/bin/nginx:让 nginx 工作进程只在 CPU 0/1/2 启动;
- 若要影响所有线程(含后续 fork 出的子线程),加 -a 参数:
taskset -ca 0,2 ./server。
注意事项与常见坑点
实际使用中容易忽略几个关键细节:
- CPU 编号从 0 开始,
taskset -c 3是第 4 个物理/逻辑核,不是“第三个”; - 掩码模式(如
0x04)对应二进制100,即仅 CPU 2,位数顺序是 LSB→CPU0; - 绑定后进程仍可能被抢占——taskset 不阻止其他进程或中断在同核运行,如需彻底隔离,需配合
isolcpus内核参数或 cgroups; - systemd 服务建议用
CPUAffinity=配置项持久化,避免每次重启失效。











