En los sistemas operativos tipo Unix, los nuevos procesos se crean mediante la llamada al sistema fork()
. El PID es devuelto al proceso padre, permitiéndole referirse al hijo en posteriores llamadas a funciones. El padre puede, por ejemplo, esperar a que el hijo termine con la función waitpid()
, o terminar el proceso con kill()
.
Hay dos tareas con IDs de proceso especialmente distinguidos: swapper o sched tiene el ID de proceso 0 y es responsable de la paginación, y es en realidad parte del núcleo en lugar de un proceso normal en modo usuario. El proceso ID 1 suele ser el proceso init, responsable principalmente 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 núcleo. 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 de init para mantener la coherencia con los sistemas más antiguos.
Los ID de proceso, en primer lugar, suelen asignarse de forma secuencial, comenzando por 0 y subiendo 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. Sin embargo, para esta y las siguientes pasadas se omiten los PIDs aún asignados a los procesos. Algunos consideran que esto es una potencial 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. 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 de procesos en la memoria.
El ID del proceso actual se proporciona mediante una llamada al sistema getpid()
, o como una variable $$
en el shell. El ID de proceso de un proceso padre se puede obtener mediante una llamada al sistema getppid()
.
En Linux, el ID de proceso máximo viene dado por el pseudoarchivo /proc/sys/kernel/pid_max
.
PidfileEdit
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.