You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需编写代码,如何获取Linux当前Shell的可用亲和核心数?

获取当前Shell亲和性限制下的可用核心数

在Linux环境中,无需编译代码即可通过以下几种方式获取当前Shell受亲和性限制后的可用核心数量:

方法1:利用taskset解析亲和性掩码

taskset可直接查看当前进程的CPU亲和性掩码,通过计算掩码二进制中1的数量得到可用核心数:

taskset -p $$ | awk '{print $NF}' | xargs -I {} echo "obase=2; ibase=16; {}" | bc | grep -c "1"

说明:

  • taskset -p $$:查看当前Shell进程($$代表当前进程ID)的亲和性配置,输出最后一列是十六进制格式的核心掩码。
  • echo "obase=2; ibase=16; {}" | bc:将十六进制掩码转换为二进制字符串。
  • grep -c "1":统计二进制字符串中1的个数,即当前可使用的核心数量。

方法2:解析/proc/self/status的核心范围列表

/proc/self/status中的Cpus_allowed_list字段直接列出了当前进程可访问的CPU核心范围,通过脚本解析该字段计算总数:

grep Cpus_allowed_list /proc/self/status | awk -F ':|\t' '{split($2, ranges, ","); total=0; for(r in ranges) {split(ranges[r], bounds, "-"); if(bounds[2] == "") {total++} else {total += bounds[2] - bounds[1] + 1}} print total}'

说明:

  • grep Cpus_allowed_list /proc/self/status:提取核心范围信息,格式示例:0-1,3-5。
  • awk脚本:分割每个核心范围,单个核心(如2)直接计数,连续范围(如0-1)计算区间长度并累加,最终输出总核心数。

方法3:简洁版taskset+printf计算

借助printf直接转换十六进制掩码为二进制,再统计1的数量,比方法1更精简:

printf "%b\n" $(taskset -p $$ | awk '{print $NF}' | sed 's/^0x/\\x/g') | grep -o "1" | wc -l

内容的提问来源于stack exchange,提问作者Henrique Bucher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:53:28