我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

最后一个元素应该是cpu数量减1。


当前回答

下面将给出超线程和非超线程系统上的“真实”内核数。至少它在我所有的测试中都有效。

awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 };  END { print CORES*P }' /proc/cpuinfo

其他回答

对于物理核总数:

grep '^core id' /proc/cpuinfo |sort -u|wc -l

在多插座机器(或总是)上,将上面的结果乘以插座的数量:

echo $(($(grep "^physical id" /proc/cpuinfo | awk '{print $4}' | sort -un | tail -1)+1))

@mklement0使用lscpu给出了一个很好的答案。我在评论中写了一个更简洁的版本

如果你想这样做,让它在linux和OS X上工作,你可以这样做:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

简介: 获取物理cpu:

grep 'core id' /proc/cpuinfo | sort -u

获取物理和逻辑cpu:

grep -c ^processor /proc/cpuinfo

/proc <<这是你需要的任何关于进程和

/proc/cpuinfo <<是任何CPU信息的黄金资源。

我还认为cat /proc/cpuinfo会给我正确的答案,但是我最近看到我的ARM四核Cortex A53系统只显示了一个单核。似乎/proc/cpuinfo只显示活动的内核,而:

猫/ sys /设备/系统/ cpu /礼物

能更好地衡量那里有什么。你也可以

cat /sys/devices/system/cpu/online

查看哪些内核在线,以及

猫姐姐/设备/系统cpu -离线

查看哪些核心处于脱机状态。在线、离线和当前sysfs条目返回cpu的索引,因此返回值为0表示核心0,而返回值为1-3表示核心1、2和3。

参见https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu

Linux、MacOS、Windows跨平台解决方案:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu || echo "$NUMBER_OF_PROCESSORS")