我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
当前回答
Python 3还提供了一些简单的方法来获取它:
$ python3 -c "import os; print(os.cpu_count());"
4
$ python3 -c "import multiprocessing; print(multiprocessing.cpu_count())"
4
其他回答
这个线程中的大多数答案都与逻辑核心有关。
在Ubuntu 18上使用BaSH。x,我发现这可以很好地确定物理cpu的数量:
numcpu="$(lscpu | grep -i 'socket(s)' | awk '{print $(2)}')"
它应该可以在大多数Linux发行版上运行。
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”进行分组。这有点俗气,但很管用。
如果有任何专家知道如何简化这种混乱,请告诉我。
使用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()。
更快,不用叉子
这适用于几乎所有的shell。
ncore=0
while read line ;do
[ "$line" ] && [ -z "${line%processor*}" ] && ncore=$((ncore+1))
done </proc/cpuinfo
echo $ncore
4
为了与shell、dash、busybox等保持兼容,我使用了ncore=$((ncore+1))而不是((ncore++))。
bash的版本
ncore=0
while read -a line ;do
[ "$line" = "processor" ] && ((ncore++))
done </proc/cpuinfo
echo $ncore
4
简介: 获取物理cpu:
grep 'core id' /proc/cpuinfo | sort -u
获取物理和逻辑cpu:
grep -c ^processor /proc/cpuinfo
/proc <<这是你需要的任何关于进程和
/proc/cpuinfo <<是任何CPU信息的黄金资源。