Contexto:¿Cómo me aseguro de que un proceso en ejecución sea el proceso que espero se esté ejecutando?
Tengo un Linux [1] sistema que gestiona una serie de de Daemon de terceros con los que las interacciones se limitan a desembolsar [2] scripts de inicio, es decir, sólo {Inicio | reinicio | stop | status} están disponibles.
Problema:
Los procesos pueden asumir el PID de un proceso previamente en marcha, el estado de los procesos son controlados por la inspección de la presencia de unos procesos en ejecución con el mismo de la PID.
Ejemplo:
Proceso de una carrera con PID 123, muere posteriormente, se inicializa proceso B con PID 123 y el comando de estado responde con un no auténtico (errónea) "OK". En otras palabras, solo verificamos la presencia de un proceso desde su PID para validar que el proceso se está ejecutando, suponemos que si un proceso con este PID existe, es el proceso en cuestión.
Soluciones propuestas:
- interrogar al proceso, usando el PID, para asegurar el comando/demonio que se ejecuta como el PID es como se esperaba. El problema con esta solución es que tanto el comando como el PID deben coincidir; por lo tanto, es necesario mantener y sincronizar múltiples bits de información, y agregar complejidad adicional a las condiciones de error/borde.
- Correlacione el tiempo de creación del archivo PID con la hora de inicio del proceso, si el proceso está dentro de un cierto delta del tiempo de creación del archivo PID, podemos estar bastante seguros de que el comando/daemon en ejecución es el esperado.
¿Existe alguna forma estándar de ratificar la autenticidad de un archivo de proceso/PID, más allá de la presencia de un proceso que se ejecuta con ese PID? Es decir. Yo (como el sistema) quiero saber si usted (el proceso) se está ejecutando y si usted es quien creo que es (A y no B).
Suponiendo que hemos elegido implementar la segunda solución propuesta anteriormente, ¿qué intervalo de confianza/delta entre el tiempo de creación del PID y la hora de inicio del proceso es razonable? Aquí, razonable significa un compromiso aceptable entre los errores tipo 1/tipo 2.
[1] CentOS/RHEL [2] Bash
¿No debería estar esto en [ServerFault] (http://serverfault.com/)? – Graham
¿Puede realizar cambios en los demonios de terceros por sí mismos? Si es así, puede usar 'flock' para crear algunos bloqueos de sistema de archivos para los daemons. –
¿Estás seguro de que los identificadores de proceso se reutilizan a la vez? Sé que ese es el caso de Windows, pero no lo he observado en Linux o UNIX. Ver http://stackoverflow.com/questions/3446727/how-does-linux-determine-the-next-pid – cdarke