我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
当前回答
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”进行分组。这有点俗气,但很管用。
如果有任何专家知道如何简化这种混乱,请告诉我。
其他回答
不是我的网页,但是来自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
这很简单。只需使用这个命令:
lscpu
下面是我用来计算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
Linux、MacOS、Windows跨平台解决方案:
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu || echo "$NUMBER_OF_PROCESSORS")
如果你可以使用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())"