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 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 de función, lo que permite manipular los procesos, como ajustar la prioridad del proceso o eliminarlo por completo.
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 hacer referencia al proceso hijo en futuras llamadas de función. El padre puede, por ejemplo, esperar a que el proceso hijo finalice con la waitpid()
función o finalizar el proceso con kill()
.
Hay dos tareas con identificadores de proceso especialmente distinguidos: PID 0 se usa para swapper o sched , que es parte del núcleo y es un proceso que se ejecuta en un núcleo de CPU siempre que ese núcleo de CPU no tiene nada más que hacer. [1] Linux también llama a los subprocesos de este proceso idle task . [2] En algunas API, PID 0 también se usa como un valor especial que siempre se refiere al subproceso, proceso o grupo de procesos que realiza la llamada. [3] [4] El identificador de proceso 1 suele ser el proceso init principalmente responsable de iniciar y apagar el sistema. Originalmente, el identificador de proceso 1 no estaba específicamente reservado para init por ninguna medida técnica: simplemente tenía este identificador como una consecuencia natural de ser el primer proceso invocado por el núcleo. Los sistemas Unix más recientes suelen tener componentes de núcleo adicionales 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 identificadores 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 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 y los pases posteriores, se omiten todos los PID que aún esté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 la cantidad de páginas de kernel de información de proceso en la memoria.
El identificador del proceso actual se obtiene mediante una getpid()
llamada al sistema [7] o como una variable $$
en el shell. El identificador del proceso de un proceso padre se puede obtener mediante una llamada al sistema [8]getppid()
.
En Linux , el ID de proceso máximo lo proporciona el pseudoarchivo /proc/sys/kernel/pid_max
. [9]
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 requerida ]
En la familia de sistemas operativos Windows , se puede obtener el ID del proceso actual usando la GetCurrentProcessId()
función de la API de Windows , [10] y el ID de otros procesos usando GetProcessId()
. [11] Internamente, el ID del proceso se llama ID del cliente y se asigna desde el mismo espacio de nombres que los ID de los subprocesos , por lo que estos dos nunca se superponen. Al proceso inactivo del sistema se le asigna el ID de proceso 0. Al proceso del sistema se le asigna 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 es parte de la especificación. [13]
pid 0 == swapper == tarea inactiva