PID máximo en Linux

4 minutos de lectura

avatar de usuario
Alejandro Stolz

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?

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

    –Sony Santos

    10 de enero de 2019 a las 6:46


avatar de usuario
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? Poder getpid() 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 para 4194304

    – 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

avatar de usuario
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_LIMITaproximadamente 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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad