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:
#!/usr/bin/env sh
file="/var/run/sshd.pid"
processid=$(cat /var/run/sshd.pid)
if [ ! -f ${file} ]; then
echo "File does not exists: ${file}"
exit 1
fi
if [ ! -r ${file} ]; then
echo "Insufficient file persmissons: ${file}"
exit 1
fi
psoutput=$(ps -p ${processid} -o comm=)
if [ $? == 0 ];then
if [ ${psoutput} == "sshd" ]; then
echo "sshd process is realy running with process id ${processid}"
exit 0
else
echo "given process id ${processid} is not sshd: ${psoutput}"
exit 1
fi
else
echo "there is no process runing with process id ${processid}"
exit 0
fi
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
find . | grep myfile
averiguar, si sale un archivo.