एक प्रक्रिया आईडी वाली फाइल विश्वसनीय नहीं है यह निर्धारित करें कि कोई प्रक्रिया चल रही है या नहीं। यह प्रक्रिया के लिए अंतिम दी गई प्रक्रिया आईडी का पता लगाने के लिए सिर्फ एक विश्वसनीय स्रोत है।
जब आपके पास प्रक्रिया आईडी होती है, तो आपको फ्यूचर चेकिंग करनी होती है, यदि प्रक्रिया वास्तव में चल रही हो।
यहाँ एक उदाहरण है:
#!/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 एक अच्छी कमांड है, लेकिन जब आप एक से अधिक इंस्टेंसेस चलाते हैं, तो आप परेशानी में पड़ जाते हैं। उदाहरण के लिए जब आपके पास पोर्ट टीसीपी / 22 पर एक नियमित sshd चल रहा है और आपके पास पोर्ट टीसीपी / 2222 पर चलने वाला एक और sshd है, तो pgrep खोजते समय दो प्रोसेस आईडी डिलीवर करेगा sshd को ... जब सामान्य sshd अपने pid / var में होता है /run/sshd.pid और दूसरा /var/run/sshd-other.pid में स्पष्ट रूप से भिन्न हो सकता है।
मैं सिर्फ ps का उपयोग करने की सलाह नहीं देता , grep और grep के साथ एक या कई पाइपों के माध्यम से पाइपिंग -v सभी अन्य सामानों को फ़िल्टर करने की कोशिश करता है जो आपको रुचि नहीं देता है ... यह उपयोग करने की तरह थोड़ा सा है
find . | grep myfile
यह पता लगाने के लिए, यदि कोई फ़ाइल बाहर निकलती है।