2013-10-11 8 views
6

मैं बैश से कहने की कोशिश कर रहा हूं, प्रक्रिया शुरू/शुरू करने की प्रतीक्षा करें। मैं उदाहरण के लिए इस तरह से कोशिश कर रहा हूँ:बैश प्रक्रिया शुरू करने के लिए प्रतीक्षा करें

  1. क्यों यह एक फ़ाइल बुलाया उत्पन्न "0" (फ़ाइल खाली हैं) मुझे नहीं करना चाहते हैं:

    notepad=`pidof notepad.exe` 
        until [ $notepad > 0 ] 
         do 
          taskset -p 03 $notepad 
          renice -n 5 -p $notepad 
          sleep 5 
          renice -n 0 -p $notepad 
         done 
    

    अच्छी तरह से मैं पालन प्रश्न हैं एक नई फाइल बनाएं, पीआईडी ​​को निष्पादन की जांच करने के लिए बस प्रतीक्षा करें।

  2. यह एक लूप है, लेकिन यदि 2 आदेश निष्पादित कर रहे हैं, 1 बार मैं कैसे जारी रख सकता हूं ???

  3. इसके लिए इसका बेहतर उपयोग "कब तक या" ???

  4. प्रतीक्षा प्रक्रिया शुरू करने या शुरू करने के लिए एक और विचार ???

उत्तर

2

अपने पहले प्रश्न का उत्तर देने के लिए: '>' गणितीय/तुलना ऑपरेटर 'से अधिक' नहीं है; यह आपको पाइप आउटपुट को फ़ाइल (हैंडल) में देने का तरीका है।

echo "some text" > myfile.txt 

myfile.txt नाम की एक फ़ाइल तैयार करेगा, और '>' उस फ़ाइल में कमांड के आउटपुट को भेजा जाएगा। मैं कल्पना करूंगा कि आपकी फ़ाइल '0' में इसमें पिड है, और कुछ भी नहीं। के बराबर या, की तुलना में कम से कम, कम या बराबर अधिक से अधिक, बराबर, नहीं: अगर एक मूल्य की तुलना में (या अधिक से अधिक है परीक्षण करने के लिए:

इसके बजाय, -gt (-ge, -lt, -le, -eg, -ne या संबंधित वेरिएंट) की कोशिश बराबर, क्रमशः) यह देखने के लिए कि क्या मदद करता है। यही कारण है,

until [ $notepad -gt 0 ] 
+0

धन्यवाद, लेकिन मैं इसे भूल गया, और ">>" के लिए ??? – inukaze

+1

'> 'एक फाइल को लिखता है।अगर फ़ाइल मौजूद है, तो यह अधिलेखित है। '>> 'एक फ़ाइल के अंत में संलग्न है; अगर फ़ाइल पहले से मौजूद नहीं है, तो यह बनाया गया है। '>' डेटा हटा सकता है, '>> 'नहीं। – dangenet

14

है अपने कोड के साथ कई मुद्दों पर होते हैं:

  1. pidof 0 प्रिंट नहीं करता या -1 कोई प्रक्रिया है अगर है, तो आपके तर्क गलत है
  2. pidof कई लौट सकते हैं यदि कई प्रक्रियाएं होती हैं तो पिड्स, जो आपकी तुलना
  3. > को [ ] में से बचने के लिए है अन्यथा आपका कोड [ $notepad ] > 0 के बराबर है, जो फ़ाइल को निर्देशित करता है।
  4. > यहां तक ​​कि सही ऑपरेटर भी नहीं है। आप -gt चाहते थे, लेकिन जैसा कि बिंदु # 1 और # 2 में उल्लिखित है, आपको संख्याओं की तुलना नहीं करनी चाहिए।
  5. until लूप चलाता है जब तक कि स्थिति सत्य न हो। यह स्थिति को सच होने की प्रतीक्षा नहीं करता है, और फिर लूप चलाता है।

यह आप इसे कैसे करना चाहिए है:

# Wait for notepad to start 
until pids=$(pidof notepad) 
do 
    sleep 1 
done 

# Notepad has now started. 

# There could be multiple notepad processes, so loop over the pids 
for pid in $pids 
do   
    taskset -p 03 $pid 
    renice -n 5 -p $pid 
    sleep 5 
    renice -n 0 -p $pid 
done 

# The notepad process(es) have now been handled 
+0

तुम मुझे समझाने या व्याख्या के साथ एक लिंक दे सकते हैं कि कैसे कैसे thats लाइन 1 - पीआईडी ​​= (नोटपैड pidof) ठीक चर पीआईडी ​​= कुछ पूरी संख्या 2 - $ पीआईडी ​​में पीआईडी ​​के लिए क्यों पीआईडी? $ pids में परिवर्तनीय हैं, लेकिन मैं "पिड" नहीं करता हूं यह एक नया विविधता बना रहा है ??? – inukaze

+0

'pids = $ (pidof नोटपैड)' pids = "14436 16690 19023" '(या शायद केवल 'pids =" 14436 "' हो सकता है यदि केवल एक ही नोटपैड चल रहा हो)। लूप के साथ, आप इन नंबरों में से प्रत्येक पर '$ pids' में लूप करते हैं। प्रत्येक बार लूप चलाता है, '$ pid'' $ pids' में सूची से अलग मूल्य होगा, इसलिए पहली बार यह 14436 होगा, अगली बार 166 9 0, आदि –

1

अगर मैं सही ढंग से समझ, आप जब तक नोटपैड शुरू की है प्रतीक्षा करने के लिए चाहते हैं। फिर पिडॉफ आपके लूप के अंदर होना चाहिए।

while ! pidof notepad.exe >> /dev/null ; 
do 
sleep 1 
done 
notepad=$(pidof notepad.exe) 
taskset -p 03 $notepad 
renice -n 5 -p $notepad 
sleep 5 
renice -n 0 -p $notepad 
+0

अच्छी तरह से विचार, वास्तव में, जब टास्कसेट और किराए पर लागू होते हैं, स्क्रिप्ट के साथ जारी रखने के लिए लूप से बाहर निकलें। मुझे नहीं पता कि अच्छा विचार ब्रेक का उपयोग करता है या उसके लिए जारी रहता है। – inukaze

संबंधित मुद्दे