Linux动态亲和性:如何获取未被任何进程占用的CPU核心?
获取未被进程使用的空闲CPU核心(Linux)
方法1:用bash脚本动态筛选
可以通过原生命令组合,写出能自动识别空闲核心的脚本,直接用于taskset绑定进程:
#!/bin/bash # 获取系统所有CPU核心编号(比如4核心就是0-3) ALL_CPUS=$(seq 0 $(($(nproc) - 1))) # 提取当前所有进程正在使用的核心(去重) USED_CPUS=$(ps -eo psr | grep -v PSR | sort -n | uniq | tr '\n' ' ') # 计算所有核心和已用核心的差集,得到空闲核心 IDLE_CPUS=$(comm -23 <(echo "$ALL_CPUS" | tr ' ' '\n' | sort) <(echo "$USED_CPUS" | tr ' ' '\n' | sort)) if [ -n "$IDLE_CPUS" ]; then echo "空闲CPU核心列表: $IDLE_CPUS" # 随机选一个空闲核心(按需使用) RANDOM_CPU=$(echo "$IDLE_CPUS" | shuf -n1) echo "选中的空闲核心: $RANDOM_CPU" # 示例:用taskset把进程绑定到该核心 # taskset -c $RANDOM_CPU your_process_command else echo "暂无空闲CPU核心可用" fi
方法2:临时手动查看(适合快速操作)
- 打开
top命令,按下数字1,就能看到每个CPU核心的实时使用率,找到%CPU持续为0的核心编号。 - 直接用
taskset -c <核心编号> 你的进程命令绑定即可。
注意事项
- 脚本获取的是瞬时空闲状态,Linux调度器可能随时把其他进程调度到空闲核心上。如果需要长期独占核心,建议配合
cpuset工具创建专属CPU组,或者给绑定后的进程设置高优先级。 - 部分内核线程可能短暂占用核心,若要更精准的结果,可以连续采样几次空闲核心,取重复出现的编号。
内容的提问来源于stack exchange,提问作者yaar
相关产品推荐
相关产品推荐

