¿Puede / proc / PID seguir existiendo cuando PID no se está ejecutando?

11

¿Es posible que /proc/4587exista una carpeta como aunque no haya un proceso que tenga PID 4587?

David Dai
fuente
1
¿Se pregunta si verificar / proc / N es una forma segura / confiable de ver si PID N se está ejecutando?
Andy Lester
Me preguntaba si teóricamente podría haber residuos en / proc después de que el proceso haya desaparecido.
David Dai

Respuestas:

25

Si /proces solo el procmontaje (y nadie está jugando trucos con superposiciones), no, una carpeta basada en pid solo existe mientras el proceso correspondiente exista en algún estado (incluso como zombie). De hecho, justo antes de devolver una entrada de directorio para una identificación de proceso, el núcleo vuelve a validar la existencia del proceso , por lo que en el instante en que se devuelve una entrada de directorio, el proceso correspondiente todavía está allí. El acceso a un directorio también comienza buscando el proceso correspondiente. (Si los números de línea cambian, busque proc_pident_instantiatey proc_pident_lookup.)

Puede encontrarse con problemas causados ​​por el listado /procy el uso de los resultados más tarde (incluso unos microsegundos más tarde): un proceso puede ejecutarse cuando enumera /procy detenerse antes de actuar sobre los resultados.

Stephen Kitt
fuente
3
¿Qué pasa con los procesos que finalizaron la ejecución pero que wait()no fueron invocados?
el.pescado
2
Buen punto @ el.pescado, una comprobación rápida indica que los procesos zombies aún tienen su directorio. Actualizaré mi respuesta, gracias!
Stephen Kitt
Básicamente, si psmuestra el proceso, su /procdirectorio debería existir.
Barmar
De hecho, @Barmar “debe”: psacceder /procpara encontrar la información que muestra.
Stephen Kitt