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.
Wenn es in Ordnung ist, dass Sie Python verwenden können, dann numexpr
Modul verfügt über eine Funktion für diesen Zweck:
In [5]: import numexpr as ne
In [6]: ne.detect_number_of_cores()
Out[6]: 8
auch dies:
In [7]: ne.ncores
Out[7]: 8
Um diese Informationen über die Eingabeaufforderung abzufragen, verwenden Sie:
# runs whatever valid Python code given as a string with `-c` option
$ python -c "import numexpr as ne; print(ne.ncores)"
8
Oder es ist einfach möglich, diese Informationen zu erhalten von multiprocessing.cpu_count()
Funktion
$ python -c "import multiprocessing; print(multiprocessing.cpu_count())"
Oder, noch einfacher, verwenden Sie os.cpu_count()
$ python -c "import os; print(os.cpu_count())"
Die Antwort von Fravadona ist großartig und richtig aber es erfordert die Anwesenheit von lscpu
. Da es auf dem System, auf dem ich die Anzahl der physischen Kerne benötige, nicht vorhanden ist, habe ich versucht, eine Lösung zu finden, die sich nur auf proc/cpuinfo
cat /proc/cpuinfo | grep -B2 'core id' | sed 's/siblings.*/'/ | tr -d '[:space:]' | sed 's/--/\n/'g | sort -u | wc -l
Es funktioniert perfekt, aber leider ist es nicht so robust wie das von Fravadona, da es kaputt geht, wenn
/proc/cpuinfo
Änderungengrep
ersetzt das eingefügte Zeilentrennzeichen (derzeit --
) durch eine andere Zeichenfolge.ABER, ansonsten funktioniert es einwandfrei :)
Hier eine kurze Erläuterung zu allem, was gerade passiert
grep -B2 'core id'
nur die Zeilen abrufen, die uns interessieren (d. h. "core id" und die 2 vorangehenden Zeilen)
sed 's/siblings.*/'/
die Zeile "Geschwister..." entfernen
tr -d '[:space:]'
Ersetzen von Abstandsbuchstaben
sed 's/--/\n/'g
das von grep eingefügte Zeichen '--' durch einen Zeilenumbruch ersetzen
sort -u
gruppieren nach "physische ID, Kern-ID"
wc -l
die Anzahl der Zeilen zählen
Da ich ein absoluter Anfänger bin, war ich sehr zufrieden mit mir, als es funktionierte. Ich hätte nie gedacht, dass ich in der Lage sein würde, die erforderlichen Zeilen miteinander zu verbinden, um nach "physical id" und "core id" zu gruppieren. Es ist zwar etwas hakelig, aber es funktioniert.
Wenn ein Guru einen Weg kennt, dieses Chaos zu vereinfachen, lassen Sie es mich bitte wissen.
cat /proc/cpuinfo | grep processor
Das hat gut funktioniert. Als ich die erste Antwort ausprobierte, erhielt ich 3 CPUs als Ausgabe. Ich weiß, dass ich 4 CPUs auf dem System habe, also habe ich einfach eine grep
für Prozessor und die Ausgabe sah wie folgt aus:
[root@theservername ~]# cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3
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 .