我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
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())"
其他回答
上述答案适用于大多数情况,但如果您处于docker容器环境中,并且容器受到CpusetCpus的限制,那么您实际上无法通过上述方法获得真正的cpu内核。
在这种情况下,你需要这样做来获得真正的cpu内核:
grep -c 'cpu[0-9]' /proc/stat
你也可以使用Python!获取物理核数:
$ python -c "import psutil; print(psutil.cpu_count(logical=False))"
4
获取超线程核的数量:
$ python -c "import psutil; print(psutil.cpu_count(logical=True))"
8
Fravadona的回答很好,也很正确,但它需要lscpu的存在。由于在需要物理核数的系统上不存在它,所以我试图提出一个只依赖于proc/cpuinfo的系统
cat /proc/cpuinfo | grep -B2 'core id' | sed 's/siblings。* / / | tr - d的[空间:]| sed的年代/——/ \ n / g | - u | wc - l
它工作得很完美,但不幸的是,它没有Fravadona的那么坚固,因为它会崩溃
/proc/cpuinfo中字段的名称或顺序发生变化 Grep将它插入的行分隔符(当前为——)替换为其他字符串。
但是,除此之外,它完美无缺:)
以下是对正在发生的一切的快速解释
grep -B2 'core id'
只获取我们感兴趣的行(即“core id”和前面的两行)
sed 's/siblings.*/'/
去掉“兄弟姐妹…”这一行
tr -d '[:space:]'
替换空格字符
sed 's/--/\n/'g
用换行符替换由grep插入的'——'字符
sort -u
按“物理id,核心id”分组
wc -l
数一下行数
作为一个完全的菜鸟,我对自己很满意。我从来没有想过我能够将所需的行连接在一起,以“physical id”和“core id”进行分组。这有点俗气,但很管用。
如果有任何专家知道如何简化这种混乱,请告诉我。
grep -c ^processor /proc/cpuinfo
将计算在/proc/cpuinfo中以“processor”开头的行数
对于具有超线程的系统,可以使用
grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}'
它应该返回(例如)8(而上面的命令将返回16)
不是我的网页,但是来自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