Muchos programas como sshd crean archivos .pid en / var / run / que contienen su ID de proceso. ¿Son confiables estos archivos para determinar si se está ejecutando un proceso? Supongo que estos archivos se crean manualmente mediante un proceso y, por lo tanto, permanecerán en el sistema de archivos si el programa falla.
11
Jldupont tiene razón al afirmar que los archivos .pid no son confiables para determinar si un proceso se está ejecutando ya que el archivo no se puede eliminar en caso de un bloqueo.
Dejando a un lado las condiciones de la carrera, a menudo uso pgrep cuando necesito saber si un proceso se está ejecutando. Entonces podría hacer una referencia cruzada de la salida con los archivos .pid si lo considerara necesario.
fuente
Un archivo que contiene una identificación de proceso no es confiable, determine si un proceso se está ejecutando o no. Es solo una fuente confiable, para descubrir la última identificación de proceso dada para el proceso.
Cuando tiene la identificación del proceso, debe hacer una comprobación adicional, si el proceso realmente se está ejecutando.
Aquí hay un ejemplo:
pgrep es un buen comando, pero tendrás problemas cuando tengas varias instancias ejecutándose. Por ejemplo, cuando tiene un sshd normal ejecutándose en el puerto TCP / 22 y tiene otro sshd ejecutándose en el puerto TCP / 2222, entonces pgrep entregará dos identificadores de proceso al buscar sshd ... cuando el sshd normal tiene su pid en / var /run/sshd.pid y el otro podría tener su pid en /var/run/sshd-other.pid puede diferenciar claramente los procesos.
Yo no recomiendo usar solo ps , la tubería a través de uno o varios tubos con grep y grep -v tratando de filtrar toda otra materia que no le interesa ... es un poco como el uso
averiguar, si sale un archivo.
fuente
No es confiable simplemente verificar la existencia de un proceso con el mismo pid que figura en el archivo.
Pero muchas implementaciones de archivos pid también se bloquean en el archivo pid, de modo que si el proceso muere, el bloqueo desaparece. Siempre que el mecanismo de bloqueo sea confiable, verificar si el archivo aún está bloqueado es un mecanismo relativamente confiable para determinar si el proceso original aún se está ejecutando.
fuente
Jldupont es correcto.
Sin embargo, puede enviar al proceso una señal 0 (kill -s 0 pid) para ver si el proceso aún está vivo (suponiendo que tenga la autoridad para enviar dicha señal; en general, solo el propietario de un proceso puede enviar Es una señal).
fuente
Estoy de acuerdo con jschmier.
En algunos sistemas, no tiene acceso a pgrep. En tal caso, puede hacer
ps -aef | grep <pid>
para averiguar si el proceso realmente se está ejecutando.fuente