यदि एक बयान के परिणाम के आधार पर एक पिड को कैसे मारना है


0

मैं एक कार्यक्रम को फिर से शुरू करने की कोशिश कर रहा हूं अगर इसमें केवल एक ही पीआईडी ​​जुड़ा हुआ है (इसमें दो पीआईडी ​​होनी चाहिए)। यदि यह एक से अधिक है, तो यह ठीक है, मैंने इसे करने के लिए एक बैश स्क्रिप्ट लिखने की कोशिश की है, लेकिन मैं इसे स्पष्ट रूप से काम करने के लिए संघर्ष कर रहा हूं, यह मेरा कोड इतना फ्रिक है, क्या कोई मुझे अपना लक्ष्य प्राप्त करने में मदद कर सकता है?

#! /bib/bash
pgrepRes=($(pgrep deluge))
if ["${#pgrepRes[@]}" -ne "2"];
    then
        kill ${pgrepRes[0]};
fi
deluge

लेकिन मुझे यह परिणाम मिल रहा है:

जैसा कि आप देख सकते हैं कि मैंने चेक किया कि डेल्यूड के साथ कितने पीआईडी ​​जुड़े हुए हैं।

अग्रिम धन्यवाद, मुझे आशा है कि मैंने खुद को पर्याप्त स्पष्ट कर दिया, अन्यथा, पूछें :)


प्रयत्न $(pgrep deluge | wc -l)। यह आपको लाइनों की संख्या देना चाहिए, और pkill deluge अगर बयान के अंदर। एक स्थान जोड़ें [ whatever is ]। कभी नहीँ [withoutspaces]
Hastur

@ दस्तूर क्या आप एक जवाब के साथ मेरे कोड को संशोधित कर सकते हैं? धन्यवाद
FabioEnne

जब कुछ काम नहीं करता है, तो इसे अपने घटक भागों में तोड़ दें। आपकी समस्या आसपास व्हाट्सएप की कमी है [ तथा ]। इसका आह्वान करने से कोई लेना-देना नहीं है kill
a CVn

मुझे लगता है कि यह आपके उद्देश्य के अनुरूप भी नहीं है -ne 2। आपको उपयोग करना चाहिए -lt 2 से कम और नहीं बराबर नहीं -ne... आपको उपयोगी खोजना चाहिए कुछ प्रेरणा लें;) वहाँ से बैश शुरुआती गाइड
Hastur

जवाबों:


0

कुछ मिसप्रिंट हैं। कुछ इस तरह की कोशिश करो

#!/bin/bash
pgrepN=$( pgrep deluge | wc -l )
if [ "$pgrepN" -lt  "2" ]; then
   echo "less then 2"         # pkill deluge
   echo here restart deluge   # restart only if there were less than 2
fi

ध्यान दें कि शेबंग (पहली पंक्ति) में आपको बीच में जगह नहीं देनी चाहिए #! और परीक्षण ऑपरेटर के साथ शेल का पथ [] आपको ब्रैकेट के अंदर रिक्त स्थान डालने की आवश्यकता है: उदाहरण के लिए यह है [ OK ] इस में [NOT OK]
यदि मैं आपके उद्देश्य को ठीक से समझता हूं तो आप केवल 2 पुनरावृत्तियों से कम होने पर पुनः आरंभ करना चाहते हैं, इसलिए IF स्टेटमेंट के अंदर।


अद्यतन करें :

#!/bin/bash
Time_to_Sleep="5m"                      # Put here the amount of time
DKiller="/tmp/Kill_Deluge_Script.sh"    # Put here the deluge killer script Name

echo "#!/bin/bash"         >  $DKiller  # Creating script that will kill this one
echo "kill $$; sleep 3s; " >> $DKiller  # Passing the command to kill this one
echo "pkill deluge"        >> $DKiller  # Now you can kill deluge too
echo "echo deluge killed... RIP " >>   $DKiller
chmod u+x $DKiller                      # Make the script executable for you

while true 
do
  pgrepN=$( pgrep deluge | wc -l )
  if [ "$pgrepN" -lt  "2" ]; then
     echo "less then 2"         # pkill deluge
     echo here restart deluge   # restart only if there were less than 2
  fi
sleep $Time_to_Sleep
done

इसने एक जादू की तरह काम किया! आपका बहुत बहुत धन्यवाद! मेरा अगला काम अब इसे क्रोन जॉब से जोड़ना है जो हर 5 मिनट में चलता है!
FabioEnne

मैंने एक .sh फ़ाइल में स्क्रिप्ट को सहेजा और crontab (crontab-e के माध्यम से) को संपादित किया और इसे हर 5 मिनट में एक्ससेक्ट करने के लिए सेट किया, मैं भी chmod 775 को निष्पादित करने की अनुमति देता हूं लेकिन इस तरह से काम नहीं करता है। .. अगर मैं स्क्रिप्ट को सीधे शेल में कॉपी और पेस्ट करूं तो यह ठीक काम करता है .. मुझे पता है कि क्रॉस्टैब ठीक से चलता है ... कोई विचार?
FabioEnne

चूंकि मुझे लगता है कि आपको हर बार जलप्रलय नहीं चलाना है, लेकिन एक बार जब आप भाग गए तो आप चाहते हैं कि यह ऊपर हो, मैं इसे छूने से बचने का प्रस्ताव देता हूं crontab , और उपरोक्त स्क्रिप्ट को कभी समाप्त न होने वाले लूप में शामिल करने के लिए, ए के साथ sleep 5m लूप के अंदर और ए के साथ echo "kill $$ > /tmp/Kill_Deluge_Script.sh" तथा echo "pkill deluge" >> /tmp/Kill_Deluge_Script.sh लूप से पहले ही ताकि आप जब चाहें आप डेल्यूज को मार सकें ...
Hastur

मैं यह पता लगा सकता हूं कि आपने जो लिखा है उसे कैसे लागू कर सकते हैं ... क्या आप उपरोक्त कोड को संपादित करने में मेरी मदद कर सकते हैं?
FabioEnne

@FabioEnne आपको कोशिश करनी चाहिए और कहना चाहिए कि आप कहाँ रुकते हैं। BTW पहले अपना प्रयास करें और जाँच करें कि क्या यह काम करता है (मैंने नहीं किया)।
Hastur
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.