我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
当前回答
如果你可以使用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())"
其他回答
下面将给出超线程和非超线程系统上的“真实”内核数。至少它在我所有的测试中都有效。
awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 }; END { print CORES*P }' /proc/cpuinfo
不是我的网页,但是来自http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902的这个命令在centos上很适合我。即使启用了超线程,它也会显示实际的cpu。
Cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l
grep -c ^processor /proc/cpuinfo
将计算在/proc/cpuinfo中以“processor”开头的行数
对于具有超线程的系统,可以使用
grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}'
它应该返回(例如)8(而上面的命令将返回16)
使用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)
你也可以使用Python!获取物理核数:
$ python -c "import psutil; print(psutil.cpu_count(logical=False))"
4
获取超线程核的数量:
$ python -c "import psutil; print(psutil.cpu_count(logical=True))"
8