stringtranslate.com

Identificador de proceso

En informática , el identificador de proceso (también conocido como ID de proceso o PID ) es un número utilizado por la mayoría de los núcleos de los sistemas operativos , como los de Unix , macOS y Windows , para identificar de forma única un proceso activo . Este número se puede utilizar como parámetro en varias llamadas a funciones, lo que permite manipular procesos, como ajustar la prioridad del proceso o eliminarlo por completo.

tipo Unix

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

Hay dos tareas con ID de proceso especialmente distinguidos: PID 0 se usa para swapper o sched , que es parte del kernel y es un proceso que se ejecuta en un núcleo de CPU siempre que ese núcleo de CPU no tenga nada más que hacer. [1] Linux también llama a los subprocesos de este proceso tareas inactivas . [2] En algunas API, PID 0 también se utiliza como un valor especial que siempre se refiere al subproceso, proceso o grupo de procesos que realiza la llamada. [3] [4] El ID de proceso 1 suele ser el proceso de inicio principal responsable de iniciar y apagar el sistema. Originalmente, el ID de proceso 1 no estaba reservado específicamente para init mediante 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 del kernel adicionales visibles como "procesos", en cuyo caso el PID 1 se reserva activamente para el proceso de inicio para mantener la coherencia con los sistemas más antiguos.

En primer lugar, los ID de proceso generalmente se asignan de forma secuencial, [5] comenzando en 0 y aumentando hasta un valor máximo que varía de un sistema a otro. Una vez que se alcanza 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. Sin embargo, para este paso y los posteriores, se omiten los PID aún asignados a los procesos. 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. Como tal, las implementaciones que están particularmente preocupadas por la seguridad pueden elegir un método diferente de asignación de PID. [6] En algunos sistemas, como MPE/iX , se utiliza el PID más bajo disponible, a veces en un esfuerzo por minimizar el número de páginas del núcleo de información del proceso en la memoria.

El ID del proceso actual lo proporciona una getpid()llamada al sistema, [7] o como una variable $$en el shell. El ID de proceso de un proceso principal se puede obtener mediante una getppid()llamada al sistema. [8]

En Linux , el ID de proceso máximo lo proporciona el pseudoarchivo /proc/sys/kernel/pid_max. [9]

archivo pid

Algunos procesos, por ejemplo, el reproductor de música moc y el demonio MySQL , escriben su PID en una ubicación de archivo documentada para permitir que otros procesos lo busquen. [ cita necesaria ]

Microsoft Windows

En la familia de sistemas operativos Windows , se puede obtener el ID del proceso actual utilizando la GetCurrentProcessId()función de la API de Windows , [10] y el ID de otros procesos utilizando GetProcessId(). [11] Internamente, el ID de proceso se denomina ID de cliente y se asigna desde el mismo espacio de nombres que los ID de hilo , por lo que estos dos nunca se superponen. El proceso inactivo del sistema recibe el ID de proceso 0. El proceso del sistema recibe el ID de proceso 8 en Windows 2000 y 4 en Windows XP y Windows Server 2003 . [12] En la familia de sistemas operativos Windows NT, los identificadores de procesos y subprocesos son todos múltiplos de 4, pero no forman parte de la especificación. [13]

Ver también

Referencias

  1. ^ ¿Qué es PID 0?
  2. ^ Código del kernel de Linux: herramientas/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. ^ Comp.unix.aix Preguntas frecuentes , consultado el 21 de julio de 2008
  7. ^ "getpid", Especificaciones básicas de Open Group, número 7, edición de 2018
  8. ^ "getppid", Especificaciones básicas de Open Group, número 7, edición de 2018
  9. ^ "proc - pseudosistema de archivos de información de proceso", Manual del programador de Linux , consultado el 28 de diciembre de 2009
  10. ^ "Función GetCurrentProcessId", Centro de desarrollo de Windows , Microsoft , 5 de diciembre de 2018
  11. ^ "Función GetProcessId", Centro de desarrollo de Windows , Microsoft , 5 de diciembre de 2018
  12. ^ Russinovich, Marcos ; David A. Solomon (2005), "Capítulo 2: Arquitectura del sistema", Microsoft Windows Internals (4ª ed.), Microsoft Press, p. 76, ISBN 0-7356-1917-4
  13. ^ Chen, Raymond (28 de febrero de 2008), "¿Por qué los ID de procesos y subprocesos son múltiplos de cuatro?", The Old New Thing , Microsoft