Ich portiere eine Anwendung von Tru64 nach Linux und sie verwendet PID_MAX, das in limits.h definiert ist. Linux hat diese Definition nicht. Wie finde ich PID_MAX in c ohne zu lesen /proc/sys/kernel/pid_max
von Hand? Gibt es eine Bibliothek?
Maximale PID unter Linux
Alexander Stolz
Exos
Standardmäßig ist es 32768, Sie können den Wert auf Ihrem System einlesen /proc/sys/kernel/pid_max
.
Und Sie können den Wert auf 64-Bit-Systemen höher einstellen (bis zu 222 = 4.194.304) mit:
echo 4194304 > /proc/sys/kernel/pid_max
Lesen Sie hier mehr:
http://www.cs.wisc.edu/condor/condorg/linux_scalability.html (über archive.org)
-
Ok, das war nicht das, was ich tun wollte, aber ich habe den Wert aus der Datei gelesen. Ich denke, es gibt keinen anderen Weg.
– Alexander Stolz
15. Juni 2011 um 9:57 Uhr
-
Der Condor-Link in Ihrer Antwort ging leider zu 404. Ich habe es durch einen Link über archive.org ersetzt, natürlich wäre es besser, wenn Sie eine aktuelle Version des Dokuments kennen.
– Derobert
18. November 2013 um 18:04 Uhr
-
Darin ist die Grenze angegeben
pid_max
Datei inklusive? dürfengetpid()
Genau diese Zahl zurückgeben oder ist das Maximum diese Zahl minus eins? (dh kann ein Prozess standardmäßig die PID 32768 haben oder ist das Maximum 32767?)– Alexis Wilke
14. September 2018 um 21:01 Uhr
-
Schön, für
Ubuntu 20.04
es sieht aus wie/proc/sys/kernel/pid_max
ist jetzt eingestellt4194304
…– Avio
17. September 2020 um 11:10 Uhr
Der Maximalwert der PID in Linux ist konfigurierbar. Sie können darauf zugreifen /proc/sys/kernel/pid_max
Datei. Diese Datei (neu in Linux 2.5) gibt den Wert an, bei dem PIDs umlaufen (dh der Wert in dieser Datei ist um eins größer als die maximale PID). Der Standardwert für diese Datei, 32768, führt zu demselben PID-Bereich wie bei früheren Kerneln. Der Wert in dieser Datei kann auf jeden Wert bis zu 2^22 (PID_MAX_LIMIT, ungefähr 4 Millionen) eingestellt werden.
Aus Programmiersicht müssen Sie verwenden pid_t
geben Sie ein, um mit der Prozess-ID zu arbeiten. Sie können sogar auf seine Min/Max-Werte zugreifen, indem Sie ganzzahlige Merkmale verwenden. Hier ist ein Beispiel für die Verwendung von C++ und Boost unter Linux 2.6.X, das auf einer x86_64-Plattform ausgeführt wird:
$ cat test.cpp
#include <sys/types.h>
#include <iostream>
#include <boost/integer_traits.hpp>
using namespace std;
int main ()
{
cout << "pid_t max = " << boost::integer_traits<pid_t>::const_max << endl;
}
$ ./test
pid_t max = 2147483647
-
Die Frage ist mit C gekennzeichnet, nicht mit C++. Die zweite Hälfte Ihrer Antwort gilt nicht für C und ist in C nicht möglich.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
9. Juni 2011 um 14:22 Uhr
-
@R: Dies ist nur ein Beispiel. Wenn ich wüsste, wie man Merkmale zur Kompilierzeit für pid_t in C erhält, würde ich C schreiben. Ich bin mir sicher, dass es ein Äquivalent zu Makros gibt.
– Benutzer405725
9. Juni 2011 um 14:24 Uhr
-
@yuyichao es wäre eher so
pow(8, sizeof(pid_t))
.– bfontaine
13. April 2014 um 16:50 Uhr
-
@bfontaine es wäre eher so
pow(2, 8 * sizeof(pid_t))
. (keine perfekte Lösung, aber ich wollte den eklatanten Fehler mit dem Erhöhen von 8 auf die Anzahl Bytes aufklären, was kaum noch mit dem gewünschten Wert zusammenhängt)– MickLH
22. Januar 2016 um 18:15 Uhr
-
@craig65535 getpid gibt garantiert keinen Fehler zurück
– Maurer
5. Dezember 2017 um 14:48 Uhr
Jonathon Reinhart
Von dem proc(5)
Manpage:
/proc/sys/kernel/pid_max
(seit Linux 2.5.34)Diese Datei gibt den Wert an, bei dem PIDs umlaufen (dh der Wert in dieser Datei ist um eins größer als die maximale PID). PIDs größer als dieser Wert werden nicht zugewiesen; Daher fungiert der Wert in dieser Datei auch als systemweite Grenze für die Gesamtzahl der Prozesse und Threads. Der Standardwert für diese Datei, 32768, führt zu demselben PID-Bereich wie bei früheren Kerneln. Auf 32-Bit-Plattformen ist 32768 der Höchstwert für pid_max. Auf 64-Bit-Systemen
pid_max
kann auf einen beliebigen Wert bis zu 2^22 (PID_MAX_LIMIT
ungefähr 4 Millionen).
-
Ich bin froh, dass Sie Referenz enthalten.
– Sony Santos
10. Januar 2019 um 6:35 Uhr
Es scheint, dass Ubuntu 20.04 das Limit auf das Maximum ausgereizt hat (4194304):
% cat /proc/sys/kernel/pid_max
4194304
AFAIK, PID_MAX in Linux ist UINT_MAX, was von der CPU abhängt
– Geoffrey
9. Juni 2011 um 14:11 Uhr
UINT_MAX
hängt nicht von der CPU in Linux ab. Es ist immer 0x7fffffff.– R.. GitHub HÖR AUF, EIS ZU HELFEN
9. Juni 2011 um 14:23 Uhr
Ähm, meinte ich
INT_MAX
.pid_t
ist natürlich ein signed int, nicht unsigned, aber ich habe gedanklich kopiert, was gnif geschrieben hat. 🙂– R.. GitHub HÖR AUF, EIS ZU HELFEN
9. Juni 2011 um 14:29 Uhr
PID_MAX_LIMIT
ist darin definiertthreads.h
. Sehen elixir.bootlin.com/linux/latest/source/include/linux/….– Sony Santos
10. Januar 2019 um 6:46 Uhr