Ich habe dieses Skript, aber ich weiß nicht, wie ich das letzte Element im Ausdruck erhalten kann:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
Das letzte Element sollte die Anzahl der CPUs minus 1 sein.
Ich habe dieses Skript, aber ich weiß nicht, wie ich das letzte Element im Ausdruck erhalten kann:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
Das letzte Element sollte die Anzahl der CPUs minus 1 sein.
Zählung der "core id" per "physical id"-Methode mit awk mit Rückgriff auf die "Prozessor"-Zählung, wenn die "core id" nicht verfügbar ist (wie bei der Himbeere)
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)
Eine weitere Antwort unter den zahlreichen vorherigen. Es ist möglich, die cgroups zu verwenden, wenn sie verfügbar sind. Die cpuset Untersystem liefert die Liste der aktiven CPUs. Diese kann in der obersten cGruppe der Hierarchie in /sys/fs/cgroup . Zum Beispiel:
$ cat /sys/fs/cgroup/cpuset/cpuset.effective_cpus
0-3
Dann wäre ein Parsing des letzteren notwendig, um die Anzahl der aktiven CPUs zu erhalten. Der Inhalt dieser Datei ist eine durch Kommata getrennte Liste von CPU-Sets.
Hier ist ein Beispiel mit tr
um die Liste in einzelne Ausdrücke zu zerlegen und mit sed
um die Intervalle in arithmetische Operationen zu übersetzen, die an expr
:
#!/bin/sh
# For test purposes, the CPU sets are passed as parameters
#cpuset=`cat /sys/fs/cgroup/cpuset/cpuset.effective_cpus`
cpuset=$1
ncpu=0
for e in `echo $cpuset | tr ',' ' '`
do
case $e in
# CPU interval ==> Make an arithmetic operation
*-*) op=`echo $e | sed -E 's/([0-9]+)-([0-9]+)/\2 - \1 + 1/'`;;
# Single CPU number
*) op=1;;
esac
ncpu=`expr $ncpu + $op`
done
echo $ncpu
Hier sind einige Beispiele für Ausführungen mit verschiedenen Arten von CPU-Sets:
$ for cpuset in "0" "0,3" "0-3" "0-3,67" "0-3,67,70-75" "0,1-3,67,70-75"
> do
> ncpu.sh $cpuset
> done
1
2
4
5
11
11
Zusammenfassung: zu erhalten physikalische CPUs dies tun:
grep 'core id' /proc/cpuinfo | sort -u
zu erhalten physisch y logisch CPUs tun dies:
grep -c ^processor /proc/cpuinfo
/proc
<< Dies ist die goldene Quelle für alle Informationen, die Sie über Prozesse und
/proc/cpuinfo
<< ist die goldene Quelle für alle CPU-Informationen.
Dies funktioniert mit fast allen Shell .
ncore=0
while read line ;do
[ "$line" ] && [ -z "${line%processor*}" ] && ncore=$((ncore+1))
done </proc/cpuinfo
echo $ncore
4
Um kompatibel zu bleiben mit Shell , Bindestrich , busybox und andere, habe ich verwendet ncore=$((ncore+1))
代わりに ((ncore++))
.
ncore=0
while read -a line ;do
[ "$line" = "processor" ] && ((ncore++))
done </proc/cpuinfo
echo $ncore
4
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
15 Stimmen
Das müssen Sie nicht
cat
antes deawk
trotzdem: einfachawk '<script>' /proc/cpuinfo
und so weiter:awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo
. Und du kommst ohne "minus eins" rein.2 Stimmen
Um die Frage direkt zu beantworten, leiten Sie das nach
tail -n 1
der die letzte Zeile übernimmt und ausgibt.1 Stimmen
Siehe auch unix.stackexchange.com/q/564494/5132 .