将多个进程绑定到特定cpu核需逐个设置其cpu亲和性,可通过taskset命令、启动脚本或systemd的cpuaffinity配置实现,并用ps或htop验证生效。

把多个进程绑定到特定 CPU 核,核心是分别设置每个进程的 CPU 亲和性(CPU affinity),确保它们只在你指定的核心上调度运行。这不是“批量一键绑定”,而是按进程逐个操作,但可通过脚本或服务配置实现统一管理。
先确认可用 CPU 核编号
Linux 中 CPU 核编号从 0 开始,需先查清系统实际在线的逻辑 CPU 列表:
- 执行 cat /proc/cpuinfo | grep processor | awk '{print $3}' 查看所有逻辑 CPU 编号(如 0、1、2、3)
- 用 nproc 看总核数,lscpu | grep "On-line" 确认哪些核当前可用
- 注意:超线程(HT)会带来额外逻辑核(如物理 4 核 + HT = 8 个 processor),但绑定时通常优先选物理核编号连续的组合(如 0–3),避免跨 NUMA 节点
对多个已有进程分别绑定
使用 taskset -pc 命令为每个进程单独设置。例如,要把 PID 为 1234、5678、9012 的三个进程都绑到 CPU 2 和 CPU 5 上:
- taskset -pc 2,5 1234
- taskset -pc 2,5 5678
- taskset -pc 2,5 9012
普通用户只能改自己启动的进程;改系统进程(如 nginx 主进程、redis-server)需 root 权限。若报 Operation not permitted,可能是被 seccomp、容器(Docker/Podman)或 systemd 的 RestrictSUIDSGID 限制拦截。
启动时统一绑定(适合脚本化部署)
如果这些进程由脚本或服务拉起,推荐在启动命令前统一加 taskset -c:
- 写一个启动脚本:
#!/bin/bash
taskset -c 2,5 /opt/app/app1 &
taskset -c 2,5 /opt/app/app2 &
taskset -c 2,5 /opt/app/app3 & - 对多线程程序(如 Java 应用、数据库后台线程),加 -a 参数确保所有线程继承亲和性:
taskset -ac 2,5 java -jar app.jar - 子进程默认继承父进程的亲和性设置,所以用 taskset 启动 shell 后再 fork 的进程也会受限于该掩码
生产环境建议用 systemd 持久化管理
若多个进程是 systemd 服务(如 myapp1.service、myapp2.service、myapp3.service),更可靠的做法是在每个服务单元文件的 [Service] 段添加:
- CPUAffinity=2 5(空格分隔,不支持逗号或连字符)
- 保存后执行:
sudo systemctl daemon-reload
sudo systemctl restart myapp1 myapp2 myapp3 - systemd 会自动将该设置透传给所有子进程,且重启后不失效,比手动 taskset 更稳定
验证是否生效:用 ps -o pid,psr,comm -p PID 看 psr 列是否落在目标核上;或用 htop(F2 → Display options → 开启 “CPU” 列)直观观察各进程实时运行核。











