Estoy transfiriendo una aplicación de Tru64 a Linux y usa PID_MAX definido en limites.h. Linux no tiene esa definición. ¿Cómo encuentro PID_MAX en C sin leer /proc/sys/kernel/pid_max
¿manualmente? ¿Hay una biblioteca?
PID máximo en Linux
Alejandro Stolz
Exos
Es 32768 por defecto, puede leer el valor en su sistema en /proc/sys/kernel/pid_max
.
Y puede establecer un valor más alto en sistemas de 64 bits (hasta 222 = 4.194.304) con:
echo 4194304 > /proc/sys/kernel/pid_max
Leer más aquí:
http://www.cs.wisc.edu/condor/condorg/linux_scalability.html (a través de archive.org)
-
Ok, eso no era lo que quería hacer, pero terminé leyendo el valor del archivo. Supongo que no hay otra manera.
– Alejandro Stolz
15 de junio de 2011 a las 9:57
-
Desafortunadamente, el enlace de Condor en su respuesta fue 404. Lo reemplacé con un enlace a través de archive.org, por supuesto, sería mejor si conoce una versión actual del documento.
– derobert
18 de noviembre de 2013 a las 18:04
-
¿El límite se muestra en ese
pid_max
archivo incluido? Podergetpid()
devolver ese mismo número o es el máximo ese número menos uno? (es decir, por defecto, ¿puede un proceso tener PID 32768 o el máximo es 32767?)– Alexis Wilke
14/09/2018 a las 21:01
-
agradable, para
Ubuntu 20.04
parece que/proc/sys/kernel/pid_max
ahora está configurado para4194304
…– Avión
17 sep 2020 a las 11:10
El valor máximo del PID en Linux es configurable. Puede acceder a través de /proc/sys/kernel/pid_max
expediente. Este archivo (nuevo en Linux 2.5) especifica el valor en el que se ajustan los PID (es decir, el valor en este archivo es uno mayor que el PID máximo). El valor predeterminado para este archivo, 32768, da como resultado el mismo rango de PID que en kernels anteriores. El valor de este archivo se puede establecer en cualquier valor hasta 2^22 (PID_MAX_LIMIT, aproximadamente 4 millones).
Desde la perspectiva de la programación, tienes que usar pid_t
tipo para trabajar con ID de proceso. Incluso puede acceder a sus valores mínimos/máximos utilizando rasgos enteros. Aquí hay un ejemplo de cómo hacerlo usando C++ y Boost en Linux 2.6.X ejecutándose en la plataforma 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
-
La pregunta está etiquetada como C, no como C++. La segunda mitad de su respuesta no se aplica a C y no es posible en C.
– R.. GitHub DEJA DE AYUDAR A ICE
9 de junio de 2011 a las 14:22
-
@R: Este es solo un ejemplo, si supiera cómo obtener rasgos de tiempo de compilación para pid_t en C, escribiría C. Estoy seguro de que hay algún equivalente con las macros.
– usuario405725
9 de junio de 2011 a las 14:24
-
@yuyichao sería más como
pow(8, sizeof(pid_t))
.– bfontaine
13/04/2014 a las 16:50
-
@bfontaine sería más como
pow(2, 8 * sizeof(pid_t))
. (no es una solución perfecta, pero quería aclarar el error evidente al elevar 8 al número de bytes, que apenas está relacionado con el valor deseado)– MickLH
22 de enero de 2016 a las 18:15
-
@ craig65535 se garantiza que getpid no devolverá un error
– albañil
5 de diciembre de 2017 a las 14:48
jonathan reinhart
Desde el proc(5)
página man:
/proc/sys/kernel/pid_max
(desde Linux 2.5.34)Este archivo especifica el valor al que se ajustan los PID (es decir, el valor de este archivo es uno mayor que el PID máximo). Los PID superiores a este valor no se asignan; por lo tanto, el valor en este archivo también actúa como un límite de todo el sistema en el número total de procesos y subprocesos. El valor predeterminado para este archivo, 32768, da como resultado el mismo rango de PID que en kernels anteriores. En plataformas de 32 bits, 32768 es el valor máximo para pid_max. En sistemas de 64 bits,
pid_max
se puede establecer en cualquier valor hasta 2^22 (PID_MAX_LIMIT
aproximadamente 4 millones).
-
Me alegro de que hayas incluido la referencia.
–Sony Santos
10 de enero de 2019 a las 6:35
Parece que Ubuntu 20.04 ha llevado el límite al máximo (4194304):
% cat /proc/sys/kernel/pid_max
4194304
AFAIK, PID_MAX en Linux es UINT_MAX, que depende de la CPU
– Geoffrey
9 de junio de 2011 a las 14:11
UINT_MAX
no depende de la CPU en Linux. Siempre es 0x7fffffff.– R.. GitHub DEJA DE AYUDAR A ICE
9 de junio de 2011 a las 14:23
em, quise decir
INT_MAX
.pid_t
es, por supuesto, un int firmado, no sin firmar, pero copié mentalmente lo que escribió gnif. 🙂– R.. GitHub DEJA DE AYUDAR A ICE
9 de junio de 2011 a las 14:29
PID_MAX_LIMIT
se define enthreads.h
. Ver elixir.bootlin.com/linux/latest/source/include/linux/….–Sony Santos
10 de enero de 2019 a las 6:46