Articulo de referencia

Identificador de proceso

En informática , el identificador de proceso (también conocido como ID de proceso o PID ) es un número que utilizan la mayoría de los núcleos de sistemas operativos —como los de...

En informática , el identificador de proceso (también conocido como ID de proceso o PID ) es un número que utilizan la mayoría de los núcleos de sistemas operativos —como los de Unix , macOS y Windows— para identificar de forma única un proceso activo . Este número puede utilizarse como parámetro en diversas llamadas a funciones, lo que permite manipular los procesos, por ejemplo, ajustando su prioridad o finalizándolo por completo.

Similar a Unix

En los sistemas operativos tipo Unix , los nuevos procesos se crean mediante la fork()llamada al sistema . El PID se devuelve al proceso padre , lo que le permite referirse al hijo en llamadas a funciones posteriores. El padre puede, por ejemplo, esperar a que el hijo termine con la waitpid()función, o terminar el proceso con kill().

Hay dos tareas con identificadores de proceso especialmente distinguidos: el PID 0 se utiliza para swapper o sched , que forma parte del kernel y es un proceso que se ejecuta en un núcleo de CPU cuando ese núcleo de CPU no tiene nada más que hacer. [ 1 ] Linux también llama a los hilos de este proceso tareas inactivas . [ 2 ] En algunas API, el PID 0 también se utiliza como un valor especial que siempre se refiere al hilo, proceso o grupo de procesos que realiza la llamada. [ 3 ] [ 4 ] El ID de proceso 1 suele ser el proceso init, el principal responsable de iniciar y apagar el sistema. Originalmente, el ID de proceso 1 no estaba reservado específicamente para init por ninguna medida técnica: simplemente tenía este ID como consecuencia natural de ser el primer proceso invocado por el kernel. Los sistemas Unix más recientes suelen tener componentes adicionales del kernel visibles como 'procesos', en cuyo caso el PID 1 se reserva activamente para el proceso init para mantener la coherencia con los sistemas más antiguos.

Los ID de proceso, en primer lugar, se asignan generalmente de forma secuencial, [ 5 ] comenzando en 0 y aumentando hasta un valor máximo que varía de un sistema a otro. Una vez alcanzado este límite, la asignación se reinicia en 300 y vuelve a aumentar. En macOS y HP-UX , la asignación se reinicia en 100. [ 6 ] Sin embargo, para esta y las siguientes pasadas, cualquier PID que aún esté asignado a procesos se omite. Algunos consideran que esto es una posible vulnerabilidad de seguridad, ya que permite extraer información sobre el sistema o pasar mensajes de forma encubierta entre procesos. Por lo tanto, las implementaciones que están particularmente preocupadas por la seguridad pueden elegir un método diferente de asignación de PID. [ 7 ] En algunos sistemas, como MPE/iX , se utiliza el PID disponible más bajo, a veces en un esfuerzo por minimizar el número de páginas del kernel de información de procesos en la memoria.

El ID del proceso actual se obtiene mediante una getpid()llamada al sistema [ 8 ] o como una variable $$en el intérprete de comandos. El ID del proceso padre se puede obtener mediante una getppid()llamada al sistema [ 9 ] .

En Linux , el ID de proceso máximo viene dado por el pseudoarchivo /proc/sys/kernel/pid_max. [ 10 ]pid_max históricamente se ha establecido en 65.535 (2161{\displaystyle 2^{16}-1}) en Linux, pero ahora se puede configurar hasta 4.194.303 (2221{\displaystyle 2^{22}-1}) en sistemas Linux de 64 bits, [ 11 ]

Archivo PID

Algunos procesos (incluidos muchos demonios , como por ejemplo el demonio MySQL ) escriben su ID de proceso en una ubicación de archivo documentada, para permitir que otros procesos lo consulten.

Microsoft Windows

En los sistemas operativos Microsoft Windows , se puede obtener el ID de un proceso actual usando la GetCurrentProcessId()función de la API de Windows [ 12 ] y el ID de otros procesos usando [ 13 ]GetProcessId() . Internamente, el ID del proceso se llama ID de cliente y se asigna del mismo espacio de nombres que los ID de subprocesos , por lo que estos dos nunca se superponen. Al proceso inactivo del sistema se le asigna el ID de proceso 0. En sistemas Windows más antiguos , al proceso del sistema se le asigna el ID de proceso 8 en Windows 2000 y 4 en Windows XP y Windows Server 2003 [ 14 ] . En la familia de sistemas operativos Windows NT , los identificadores de procesos y subprocesos son todos múltiplos de 4, pero no forma parte de la especificación [ 15 ] .

Véase también

Referencias

  1. Anderson, David (5 de junio de 2024), ¿Qué es PID 0?, archivado del original el 7 de junio de 2024.
  2. Código del kernel de Linux: tools/perf/builtin-sched.c , pid 0 == swapper == tarea inactiva
  3. kill(2) — Página del manual de Linux
  4. sched_setscheduler(2) — Página del manual de Linux
  5. pid_namespaces(7) — Página del manual de Linux
  6. "¿Cuál es el PID máximo para Mac OS X?" . Ask Different . Consultado el 2 de noviembre de 2024 .
  7. Preguntas frecuentes sobre comp.unix.aix , consultado el 21/07/2008
  8. "getpid" , The Open Group Base Specifications Issue 7, 2018 edition
  9. "getppid" , The Open Group Base Specifications Issue 7, 2018 edition
  10. "proc - sistema de archivos pseudo-procesador de información de procesos" , Manual del programador de Linux , consultado el 28/12/2009.
  11. "Linux permitirá ajustar pid_max por espacio de nombres PID: ayuda para software antiguo" . www.phoronix.com . Consultado el 11 de diciembre de 2025 .
  12. "Función GetCurrentProcessId" , Centro de desarrollo de Windows , Microsoft , 5 de diciembre de 2018
  13. "Función GetProcessId" , Centro de desarrollo de Windows , Microsoft , 5 de diciembre de 2018
  14. Russinovich, Mark ; David A. Solomon (2005), "Capítulo 2: Arquitectura del sistema", Microsoft Windows Internals (4.ª ed.), Microsoft Press, pág. 76 , ISBN   0-7356-1917-4
  15. Chen, Raymond (28 de febrero de 2008), "¿Por qué los ID de procesos e hilos son múltiplos de cuatro?" , The Old New Thing , Microsoft