web-dev-qa-db-fra.com

PID maximum sous Linux

Je porte une application de Tru64 vers Linux et elle utilise PID_MAX défini dans limits.h. Linux n'a pas cette définition. Comment puis-je trouver PID_MAX dans c sans lire /proc/sys/kernel/pid_max par la main? Y a-t-il une bibliothèque?

48
Alexander Stolz

32768 par défaut, vous pouvez lire la valeur sur votre système dans /proc/sys/kernel/pid_max.

Et vous pouvez définir une valeur plus élevée (jusqu'à 222 = 4194304 sur les machines 32 bits) avec:

echo 4194303 > /proc/sys/kernel/pid_max

En savoir plus ici:

http://www.cs.wisc.edu/condor/condorg/linux_scalability.html (via archive.org)

80
Exos

La valeur maximale du PID sous Linux est configurable. Vous pouvez y accéder via /proc/sys/kernel/pid_max fichier. Ce fichier (nouveau dans Linux 2.5) spécifie la valeur à laquelle les PID s'articulent (c'est-à-dire que la valeur dans ce fichier est supérieure de un au PID maximum). La valeur par défaut de ce fichier, 32768, donne la même plage de PID que sur les noyaux précédents. La valeur de ce fichier peut être définie sur n'importe quelle valeur jusqu'à 2 ^ 22 (PID_MAX_LIMIT, environ 4 millions).

Du point de vue de la programmation, vous devez utiliser pid_t tapez pour travailler avec l'ID de processus. Vous pouvez même accéder à ses valeurs min/max en utilisant des traits entiers. Voici un exemple de cela en utilisant C++ et Boost sur Linux 2.6.X fonctionnant sur la plate-forme x86_64:

$ 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
12
user405725

Depuis la page de manuel proc(5):

/proc/sys/kernel/pid_max (depuis Linux 2.5.34)

Ce fichier spécifie la valeur à laquelle les PID se terminent (c'est-à-dire que la valeur dans ce fichier est supérieure de un au PID maximum). Les PID supérieurs à cette valeur ne sont pas alloués; ainsi, la valeur dans ce fichier agit également comme une limite à l'échelle du système sur le nombre total de processus et de threads. La valeur par défaut de ce fichier, 32768, donne la même plage de PID que sur les noyaux précédents. Sur les plates-formes 32 bits, 32768 est la valeur maximale de pid_max. Sur les systèmes 64 bits, pid_max peut être réglé sur n'importe quelle valeur jusqu'à 2 ^ 22 (PID_MAX_LIMIT, environ 4 millions).

6
Jonathon Reinhart