Một tệp chứa id quá trình không đáng tin cậy để xác định xem một quy trình có đang chạy hay không. Nó chỉ là một nguồn đáng tin cậy, để tìm ra id quy trình đã cho cuối cùng cho quy trình.
Khi bạn có id tiến trình, bạn phải kiểm tra thêm, nếu quá trình thực sự đang chạy.
Đây là một ví dụ:
#!/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 là một lệnh hay, nhưng bạn sẽ gặp rắc rối, khi bạn có nhiều phiên bản đang chạy. Ví dụ: khi bạn có một sshd thông thường chạy trên cổng TCP / 22 và bạn có một sshd khác đang chạy trên cổng TCP / 2222, thì pgrep sẽ cung cấp hai id tiến trình khi tìm kiếm sshd ... khi sshd bình thường có pid trong / var /run/sshd.pid và cái khác có thể có pid của nó trong /var/run/sshd-other.pid, bạn có thể phân biệt rõ ràng các quy trình.
Tôi không khuyên bạn chỉ sử dụng ps , đường ống qua một hoặc nhiều đường ống có grep và grep -v cố gắng lọc tất cả những thứ khác mà bạn không quan tâm ... nó hơi giống như sử dụng
find . | grep myfile
để tìm ra, nếu một tập tin thoát.