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

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

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


当前回答

我还认为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

其他回答

cat /proc/cpuinfo | grep processor

这工作得很好。当我尝试第一个答案时,我得到了3个CPU的输出。我知道我在系统上有4个cpu,所以我只是为处理器做了一个grep,输出看起来像这样:

[root@theservername ~]# cat /proc/cpuinfo | grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3
grep -c ^processor /proc/cpuinfo

将计算在/proc/cpuinfo中以“processor”开头的行数

对于具有超线程的系统,可以使用

grep ^cpu\\scores /proc/cpuinfo | uniq |  awk '{print $4}'

它应该返回(例如)8(而上面的命令将返回16)

如果你可以使用Python,那么numexpr模块有一个函数:

In [5]: import numexpr as ne

In [6]: ne.detect_number_of_cores()
Out[6]: 8

也:

In [7]: ne.ncores
Out[7]: 8

从命令提示符中查询该信息使用:

# runs whatever valid Python code given as a string with `-c` option
$ python -c "import numexpr as ne; print(ne.ncores)"
8

或者简单地说,可以从multiprocessing.cpu_count()函数中获得此信息

$ python -c "import multiprocessing; print(multiprocessing.cpu_count())"

或者干脆使用os.cpu_count()

$ python -c "import os; print(os.cpu_count())"

Python 3还提供了一些简单的方法来获取它:

$ python3 -c "import os; print(os.cpu_count());"

4

$ python3 -c "import multiprocessing; print(multiprocessing.cpu_count())"

4

我发现的最可移植的解决方案是getconf命令:

getconf _NPROCESSORS_ONLN

它在Linux和Mac OS x上都可以工作,与其他一些方法相比,它的另一个好处是getconf已经存在很长时间了。我必须在一些旧的Linux机器上进行开发,这些机器没有nproc或lscpu命令,但它们有getconf。

编者注:虽然getconf实用程序是posix强制的,但具体的_NPROCESSORS_ONLN和_NPROCESSORS_CONF值不是。 也就是说,如前所述,它们可以在Linux平台和macOS上运行;在FreeBSD/PC-BSD上,你必须省略前导_。