एक पृष्ठभूमि प्रक्रिया लॉन्च करें और जब यह समाप्त हो जाए तो जांचें


40

मैं एक प्रक्रिया को पृष्ठभूमि में कैसे लॉन्च कर सकता हूं और यह जांच सकता हूं कि यह बैश स्क्रिप्ट के भीतर कब समाप्त होगी? मेरा विचार इस तरह से एक स्क्रिप्ट है:

launch backgroundprocess &
while [ Process is running ];do
   echo "PROCESS IS RUNNING\r"
done;

echo "PROCESS TERMINATED"

जवाबों:


66

कुंजी "प्रतीक्षा" कमांड है:

#!/bin/bash

/my/process &
/another/process &
wait
echo "All processes done!"

7
इसका लाभ: यह सीपीयू समय को एक अनंत लूप के साथ हर समय नहीं जलाता है ....;)
पास्कल शमील

2
इसका नुकसान यह है कि आप प्रतीक्षा करते समय कुछ और नहीं कर सकते, जैसे कि उपयोगकर्ता को प्रगति का संकेत देना। केवल क्यूंग्लम का समाधान आपको ऐसा करने की अनुमति देता है।
मार्क बूथ

3
@ मर्क बूथ आप एक तीसरी अतुल्यकालिक नौकरी के साथ प्रगति का संकेत दे सकते हैं। जैसे:cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
विलियम पर्ससेल


29

यहाँ यह करने का एक तरीका है:

launch backgroundprocess &
PROC_ID=$!

while kill -0 "$PROC_ID" >/dev/null 2>&1; do
    echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0

2
धन्यवाद, यह निश्चित रूप से एकमात्र उत्तर है जो मूल प्रश्न की मेरी व्याख्या का जवाब देता है (और इस कारण से मैं इस प्रश्न को देख रहा हूं)
मार्क बूथ

@ क्यूंग्लम, कई प्रक्रियाएं क्या हैं? शायद इसके waitलिए अधिक उपयुक्त है?
निशांत

@cuonglm कमांड को मारने के लिए -0 विकल्प क्या करता है
k_vishwanath

1
@k_vishwanath यह रिपोर्ट करता है कि प्रक्रिया अभी भी चल रही है या नहीं।
congonglm

0

आप nohup के साथ अपनी प्रक्रिया को चला सकते हैं और nohup.out फ़ाइल को पढ़ने के लिए शेल स्क्रिप्ट लिख सकते हैं जिसे nohup लॉग इन करने के लिए उपयोग करता है।

  nohup command &

4
(1) बालों को विभाजित करने के जोखिम पर, nohupकुछ भी नहीं लिखता है nohup.out; यह केवल फ़ाइल बनाता है, और इसे कमांड के आउटपुट को रीडायरेक्ट करता है। (2) यदि कमांड कोई आउटपुट नहीं देता है, तो कुछ भी नहीं लिखा जाएगा nohup.out, और यह विचार तेजी से आगे बढ़ता है। (३) भले ही commandआउटपुट लिखता हो, आप उस आउटपुट की निगरानी करके कैसे बता सकते हैं?
जी-मैन का कहना है कि 'मोनिका'

@ जी-मैन शायद lsofयह देखने के लिए कि क्या nohupअभी भी उपयोग हो nohup.outरहा है, के आउटपुट की जांच करके , लेकिन मैं मानता हूं कि यह एक बहुत ही बालों वाला तरीका है।
एलेक्सेज मगुरा

(४) जब तक commandचलना शुरू होता है, तब तक nohupचला जाता है। (1) हां, मैं एक संख्या दोहरा रहा हूं, क्योंकि मैं वही दोहरा रहा हूं जो मैंने दो साल पहले कहा था: nohupकुछ भी नहीं लिखता nohup.out। (५) जी हाँ, आप एक शेल स्क्रिप्ट लिख सकते हैं जो लूप और रन lsofकरने के लिए देख सकती है कि क्या nohup.outअभी भी खुला है। लेकिन यह एक अलग जवाब होगा। (६) यदि आपने ऐसा किया है, तो भी यह अविश्वसनीय होगा। यदि किसी अन्य प्रक्रिया ने nohup.outफ़ाइल को खोला तो क्या होगा ? आप वास्तव में जांचना चाहेंगे कि क्या यह विशिष्ट प्रक्रिया nohup.outखुली थी । (() लेकिन, अगर आप ऐसा करने जा रहे हैं, तो बस यह जाँचें कि क्या प्रक्रिया चल रही है?
जी-मैन का कहना है कि 'मोनिका'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.