मैं पहले से चल रही प्रक्रिया में एक अतिरिक्त 'शटडाउन' कमांड कैसे जोड़ सकता हूं?


11

एक नियमित आधार पर मैं && shutdown -h nowएक लंबी चलने वाली प्रक्रिया में जोड़ना भूल जाता हूं । क्या पहले कमांड लागू होने के बादshutdown -h now कमांड जोड़ने का कोई तरीका है ? यह चल रही प्रक्रिया को बाधित करने का इरादा नहीं है। शायद पीआईडी ​​देखना संभव है?


मुझे उम्मीद है कि आपको एहसास होगा कि जो भी आएगा उसके बाद &&ही चलेगा यदि पिछली कमांड सफल रही थी। यदि आप इसे चलाना चाहते हैं, भले ही कमांड विफल हो तो ;इसके बजाय उपयोग करें ।
ज़ोक

जवाबों:


13

आउटपुट के माध्यम से सभी प्रक्रियाओं और grep को सूचीबद्ध करने के लिए बार-बार ps चलाने की आवश्यकता नहीं है। सीटीआर-जेड के साथ प्रक्रिया को पृष्ठभूमि दें, फिर चलाएं

bg %1 ; wait %1 ; shutdown -h now

यदि आपके पास अन्य पृष्ठभूमि वाली नौकरियां चल रही हैं, तो आपको ctrl-z के बजाय [1] के बजाय एक अलग जॉबस्पेक दिया जाएगा। यदि हां, तो इसके बजाय इसका उपयोग करें।


3

आप ऐसा कुछ कर सकते हैं, जो यह जांच करेगा कि क्या प्रक्रिया हर 5 सेकंड में चल रही है और उचित कार्रवाई करें:

while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
done

grepअभिव्यक्ति में वर्ग कोष्ठक पर ध्यान दें । यह सुनिश्चित करना है कि सूची grepमें समाप्त होने पर प्रक्रिया का मिलान नहीं होता है ps। चौकोर कोष्ठक के साथ किसी एक वर्ण को घेरना पर्याप्त है।


+1 चूंकि यह काम करता है। जिस तरह से मैंने इसे किया है, वैसे नहीं।
जोक

@Zoke: अगर कोई और तरीका है, तो मुझे दिलचस्पी होगी।
स्कॉट सेवेरेंस

साथ ही एक उत्तर भी दिया। पसंद आने पर इसे देखें।
जोक

आप इसे मारकर बिना किसी प्रक्रिया के अस्तित्व की जांच करने के लिए किल -0 (पीआईडी) का भी उपयोग कर सकते हैं।
शराबी

3

मेरे द्वारा हमेशा ऐसा ही किया जाता है।

  1. प्रक्रिया शुरू करें।
  2. एहसास है कि मैं अपनी &&आज्ञा करना भूल गया ।
  3. हिट Ctrl+ Zप्रक्रिया को निलंबित करने और शेल पर वापस जाने के लिए।
  4. इसे चलाने के fg && shutdown -h nowलिए:
    1. फ़ोरग्राउंड और उस प्रक्रिया को फिर से शुरू करें जिसे आपने अभी निलंबित किया है।
    2. फिर, यह खत्म होने के बाद, यह वही चलाएगा जो आप चलाना चाहते थे।

वैकल्पिक रूप से, आप इस तरह से अन्य उत्तरों में सुझाए गए अनुसार चुनाव कर सकते हैं:

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now

वह एकदम बंद हो जाएगा।
3


@psusi नहीं यह नहीं होगा
विकी

@WalkingWiki, ओह अजीब, आप सही हैं। मुझे शपथ है कि मैंने 2012 में इसका परीक्षण किया और इसे तुरंत पूरा किया।
Psusi

1

यदि आप जानते हैं कि आप इसे चला सकते हैं:

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:


0

दोनों प्रक्रियाओं को चलाने के लिए एक शेल स्क्रिप्ट बनाएं:

MyShellScript.txt:

#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now

निर्देशिका में इसे सहेजने के बाद, जहां आप दी गई प्रक्रिया शुरू करते हैं:

chmod +x MyShellScript.txt

फिर जब आप कमांड टाइप करना चाहते हैं ./MyShellScript.txtऔर यह दोनों आपके लिए करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.