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

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

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


当前回答

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

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

其他回答

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

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

4

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

4

下面是我用来计算Linux上在线物理内核数量的方法:

lscpu --online --parse=Core,Socket | grep --invert-match '^#' | sort --unique | wc --lines

简而言之:

lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l

示例(1个socket):

> lscpu
...
CPU(s):                28
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             1
....
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
14

示例(2个socket):

> lscpu
...
CPU(s):                56
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             2
...
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
28

示例(4个socket):

> lscpu
...
CPU(s):                64
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             4
...
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
32

这个线程中的大多数答案都与逻辑核心有关。

在Ubuntu 18上使用BaSH。x,我发现这可以很好地确定物理cpu的数量:

numcpu="$(lscpu | grep -i 'socket(s)' | awk '{print $(2)}')"

它应该可以在大多数Linux发行版上运行。

处理/proc/cpuinfo的内容是不必要的繁复。使用nproc,它是coreutils的一部分,所以它应该在大多数Linux安装中可用。

命令nproc打印当前进程可用的处理单元的数量,该数量可能小于在线处理器的数量。

使用nproc——all查找所有已安装的内核/处理器的数量

在我的8核机器上:

$ nproc --all
8

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

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