我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
当前回答
使用getconf确实是最可移植的方式,但是变量在BSD和Linux中与getconf有不同的名称,所以你必须测试这两个,正如要点所示: https://gist.github.com/jj1bdx/5746298 (还包括使用ksh的Solaris修复)
我个人使用:
$ getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1
如果你想在python中使用这个,你可以通过导入os模块来使用getconf使用的syscall:
$ python -c 'import os; print os.sysconf(os.sysconf_names["SC_NPROCESSORS_ONLN"]);'
至于nproc,它是GNU Coreutils的一部分,所以默认情况下在BSD中不可用。它在其他一些方法之后也使用sysconf()。
其他回答
下面是我用来计算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
处理/proc/cpuinfo的内容是不必要的繁复。使用nproc,它是coreutils的一部分,所以它应该在大多数Linux安装中可用。
命令nproc打印当前进程可用的处理单元的数量,该数量可能小于在线处理器的数量。
使用nproc——all查找所有已安装的内核/处理器的数量
在我的8核机器上:
$ nproc --all
8
简介: 获取物理cpu:
grep 'core id' /proc/cpuinfo | sort -u
获取物理和逻辑cpu:
grep -c ^processor /proc/cpuinfo
/proc <<这是你需要的任何关于进程和
/proc/cpuinfo <<是任何CPU信息的黄金资源。
使用awk计算每个“物理id”方法的“核心id”,如果“核心id”不可用,则返回“处理器”计数(如覆盆子)
echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }' /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给出了一个很好的答案。我在评论中写了一个更简洁的版本