जवाबों:
आउटपुट के माध्यम से सभी प्रक्रियाओं और grep को सूचीबद्ध करने के लिए बार-बार ps चलाने की आवश्यकता नहीं है। सीटीआर-जेड के साथ प्रक्रिया को पृष्ठभूमि दें, फिर चलाएं
bg %1 ; wait %1 ; shutdown -h now
यदि आपके पास अन्य पृष्ठभूमि वाली नौकरियां चल रही हैं, तो आपको ctrl-z के बजाय [1] के बजाय एक अलग जॉबस्पेक दिया जाएगा। यदि हां, तो इसके बजाय इसका उपयोग करें।
आप ऐसा कुछ कर सकते हैं, जो यह जांच करेगा कि क्या प्रक्रिया हर 5 सेकंड में चल रही है और उचित कार्रवाई करें:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
grepअभिव्यक्ति में वर्ग कोष्ठक पर ध्यान दें । यह सुनिश्चित करना है कि सूची grepमें समाप्त होने पर प्रक्रिया का मिलान नहीं होता है ps। चौकोर कोष्ठक के साथ किसी एक वर्ण को घेरना पर्याप्त है।
मेरे द्वारा हमेशा ऐसा ही किया जाता है।
&&आज्ञा करना भूल गया ।fg && shutdown -h nowलिए:
वैकल्पिक रूप से, आप इस तरह से अन्य उत्तरों में सुझाए गए अनुसार चुनाव कर सकते हैं:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
यदि आप जानते हैं कि आप इसे चला सकते हैं:
while ps -p $PID; sleep 5; done; shutdown -h now
Ps से गूंज के बिना चलाने के लिए ऐसा करें:
while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now
और अंत में इसे बिना किसी आउटपुट के पृष्ठभूमि में चलाने के लिए:
(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &
स्कॉट का समाधान एक अच्छा है, लेकिन इससे grepअधिक से अधिक करने की आवश्यकता को हटा देता है यदि आप पहले से ही जानते हैं। और यह टाइप करने के लिए बहुत तेज है। p:
दोनों प्रक्रियाओं को चलाने के लिए एक शेल स्क्रिप्ट बनाएं:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
निर्देशिका में इसे सहेजने के बाद, जहां आप दी गई प्रक्रिया शुरू करते हैं:
chmod +x MyShellScript.txt
फिर जब आप कमांड टाइप करना चाहते हैं ./MyShellScript.txtऔर यह दोनों आपके लिए करेंगे।
&&ही चलेगा यदि पिछली कमांड सफल रही थी। यदि आप इसे चलाना चाहते हैं, भले ही कमांड विफल हो तो;इसके बजाय उपयोग करें ।