Si escribimos ps -ef
, obtenemos una lista de procesos. ¿Por qué los números PID no son continuos?
Si escribimos ps -ef
, obtenemos una lista de procesos. ¿Por qué los números PID no son continuos?
Respuestas:
En Ubuntu son continuos. En otros sistemas operativos puede ser diferente.
El núcleo asigna PID en el rango de (RESERVED_PIDS, PID_MAX_DEFAULT). Lo hace secuencialmente en cada espacio de nombres (las tareas en diferentes espacios de nombres pueden tener los mismos ID). En caso de que el rango se agote, la asignación pid se ajusta.
( /programming/3446727/how-does-linux-determine-the-next-pid )
Mente aunque ...
Algunos temas sobre stackoverflow:
En los comentarios hay un comando para probar la asignación de PID:
for i in {1..20}; do sh -c 'echo $$'; done
Normalmente, el PID es continuo, pero algunos procesos estarán muertos en el momento en que ejecute el comando ps -ef
.
Además, algunos procesos pueden ser solo un subproceso de otro proceso que no se muestra en el ps -ef
comando. Para ver un resultado ampliado y puede verificar el PID continuo, use elpstree
pstree -p
Salida de muestra:
├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│ ├─{teamviewerd}(3475)
│ ├─{teamviewerd}(3476)
│ ├─{teamviewerd}(3477)
│ ├─{teamviewerd}(3478)
mientras que si ejecuta ps -ef
solo verá el proceso padre.
$ ps -ef | grep teamviewerd
root 3468 1 0 Jul15 ? 00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f
Son continuos. Los PID se asignan en orden secuencial hasta que se alcanza el límite máximo. Después de este límite, comenzará de nuevo desde cero.
Por lo tanto, es solo que los PID faltantes ps -ef
son procesos muertos. Tenga en cuenta que ps -ef
solo enumera los procesos en ejecución.