¿Cuál es el valor máximo de la ID del proceso?


42

¿Cuál es el valor máximo de la ID del proceso?

Además, ¿es posible cambiar una ID de proceso?

Respuestas:


61

En Linux, puede encontrar el valor PID máximo para su sistema con esto:

$ cat /proc/sys/kernel/pid_max

Este valor también se puede escribir usando el mismo archivo, sin embargo, el valor solo se puede extender hasta un máximo teórico de 32768 para sistemas de 32 bits o 4194304 para 64 bits:

$ echo 32768 > /proc/sys/kernel/pid_max

Parece ser una práctica normativa en la mayoría de los sistemas de 64 bits establecer este valor en el mismo valor que se encuentra en los sistemas de 32 bits, pero esto es por convención en lugar de un requisito.

De man 5 proc:

/proc/sys/kernel/pid_max  
  This file (new in Linux 2.5) specifies the value at which PIDs wrap around
  (i.e., the value in this file is one greater than the maximum PID). The
  default value for this file, 32768, results in the same range of PIDs as
  on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for
  pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22
  (PID_MAX_LIMIT, approximately 4 million).

Y no, no puede cambiar el PID de un proceso en ejecución. El núcleo lo asigna como un número secuencial en el momento en que comienza el proceso y ese es su identificador a partir de ese momento. Lo único que puede hacer para obtener uno nuevo es que su código bifurque un nuevo proceso y finalice el anterior.


y podemos estar seguros de los bits del núcleo con esto
Aquarius Power

2
Un curioso semi-contraejemplo de la historia "no se puede cambiar el PID" es el caso de un programa multiproceso, donde uno de los hilos auxiliares hace un exec (). Superpone todo el proceso, pero cambia el PID (al TID del hilo de ejecución).
fche

3
El valor máximo de un PID para la máquina de 32 bits es 32767, no 32768. 0 es el planificador y 1 es init, y luego los procesos del usuario obtienen del 2 al 32767.

2
user129258 tiene razón y está de acuerdo con la página del manual y el kernel doco. El valor máximo permitido de un PID , según lo solicitado por la pregunta, es uno menos que el valor en ese pseudoarchivo.
JdeBP

1
@ user129258, esto solo se mantiene si está usando init. Siempre existe la posibilidad de iniciar directamente en un shell, digamos busybox y hacer cosas manualmente desde allí sin control de trabajo. O incluso tener algunos scripts de inicio y volver al shell. En cualquier caso, el shell será PID 1 en tal caso.
Tim

9

Otras respuestas han explicado

  • /proc/sys/kernel/pid_max para Linux y
  • 99999 para FreeBSD

Pero la pregunta no especificaba un sistema operativo. Así que aquí hay algunos otros:

  • En Solaris, el valor máximo de una ID de proceso es un parámetro del núcleo sintonizable - pidmaxen /etc/system- que por defecto a 30.000 y que se puede fijar en cualquier lugar entre 266 y 999.999. Tenga en cuenta que esto no max_nprocslo es, que es un parámetro ajustable del núcleo con una función sutilmente diferente.
  • En HP-UX 10, los ajustables del kernel nombran process_id_miny process_id_maxprescriben el rango de ID de proceso permitidos.
  • En AIX, los ID de proceso comprenden varios campos, incluido un "espacio de proceso" y un campo de "conteo de generación". El valor máximo posible es 0x03FFFFFE, porque los campos ocupan solo los 26 bits inferiores de un número entero, y el bit # 0 siempre es cero, excepto para el proceso # 1.
  • En OpenBSD, el máximo es 32766.
  • En NetBSD, el máximo es 30000.

A partir de OpenBSD 6.5, el máximo ahora es 99999 según la introducción (2), no 32766.
Kaiepi

4

En FreeBSD el valor de PID está entre 0 y 99999 según intro(2)(enlace) . Aquí hay una cita del manual:

Identificacion de proceso.
Cada proceso activo en el sistema se identifica de manera única por un número entero no negativo llamado ID de proceso. El rango de esta ID es de 0 a 99999.

Si desea leer el código fuente por su cuenta, PID_MAXse define en sys/sys/proc.h(enlace) .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.