Файл, содержащий идентификатор процесса, не является надежным. Определите, запущен процесс или нет. Это просто надежный источник для определения последнего заданного идентификатора процесса.
Когда у вас есть идентификатор процесса, вы должны дополнительно проверить, действительно ли процесс запущен.
Вот пример:
#!/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 - хорошая команда, но у вас будут проблемы, если у вас запущено несколько экземпляров. Например, если у вас есть обычный sshd, работающий на порту TCP / 22, и у вас есть другой sshd, работающий на порту TCP / 2222, тогда pgrep доставит два идентификатора процесса при поиске sshd ... когда обычный sshd имеет свой pid в / var /run/sshd.pid, а другой может иметь свой pid в /var/run/sshd-other.pid, чтобы вы могли четко разграничить процессы.
Я не рекомендую использовать только ps , пропуская через один или несколько каналов с помощью grep и grep -v, пытаясь отфильтровать все другие вещи, которые вас не интересуют ... это немного похоже на использование
find . | grep myfile
выяснить, если файл выходит.