File yang berisi id proses tidak dapat diandalkan menentukan apakah suatu proses sedang berjalan atau tidak. Ini hanya sumber yang dapat diandalkan, untuk mengetahui id proses yang diberikan terakhir untuk proses tersebut.
Ketika Anda memiliki id proses, Anda harus melakukan pemeriksaan lebih lanjut, jika prosesnya benar-benar berjalan.
Berikut ini sebuah contoh:
#!/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 adalah perintah yang bagus, tetapi Anda akan mendapat masalah, saat Anda menjalankan banyak instance. Sebagai contoh ketika Anda memiliki sshd reguler yang berjalan pada port TCP / 22 dan Anda memiliki sshd lain yang berjalan pada port TCP / 2222, maka pgrep akan memberikan dua id proses ketika mencari sshd ... ketika sshd normal memiliki pid di / var /run/sshd.pid dan yang lain dapat memiliki pid di /var/run/sshd-other.pid Anda dapat dengan jelas membedakan prosesnya.
Saya tidak merekomendasikan hanya menggunakan ps , memipis melalui satu atau beberapa pipa dengan grep dan grep -v mencoba untuk menyaring semua hal lain yang tidak menarik bagi Anda ... ini seperti menggunakan
find . | grep myfile
untuk mencari tahu, jika file keluar.