Maximale PID unter Linux

Lesezeit: 4 Minuten

Benutzeravatar von Alexander Stolz
Alexander Stolz

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?

  • 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 definiert threads.h. Sehen elixir.bootlin.com/linux/latest/source/include/linux/….

    – Sony Santos

    10. Januar 2019 um 6:46 Uhr


Benutzeravatar von Exos
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ürfen getpid() 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 eingestellt 4194304

    – 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

Benutzeravatar von Jonathon Reinhart
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_LIMITungefä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

1417640cookie-checkMaximale PID unter Linux

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy