जवाबों:
कुंजी "प्रतीक्षा" कमांड है:
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
waitआप के साथ आप की जरूरत है:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
यहाँ यह करने का एक तरीका है:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
waitलिए अधिक उपयुक्त है?
आप nohup के साथ अपनी प्रक्रिया को चला सकते हैं और nohup.out फ़ाइल को पढ़ने के लिए शेल स्क्रिप्ट लिख सकते हैं जिसे nohup लॉग इन करने के लिए उपयोग करता है।
nohup command &
nohupकुछ भी नहीं लिखता है nohup.out; यह केवल फ़ाइल बनाता है, और इसे कमांड के आउटपुट को रीडायरेक्ट करता है। (2) यदि कमांड कोई आउटपुट नहीं देता है, तो कुछ भी नहीं लिखा जाएगा nohup.out, और यह विचार तेजी से आगे बढ़ता है। (३) भले ही commandआउटपुट लिखता हो, आप उस आउटपुट की निगरानी करके कैसे बता सकते हैं?
lsofयह देखने के लिए कि क्या nohupअभी भी उपयोग हो nohup.outरहा है, के आउटपुट की जांच करके , लेकिन मैं मानता हूं कि यह एक बहुत ही बालों वाला तरीका है।
commandचलना शुरू होता है, तब तक nohupचला जाता है। (1) हां, मैं एक संख्या दोहरा रहा हूं, क्योंकि मैं वही दोहरा रहा हूं जो मैंने दो साल पहले कहा था: nohupकुछ भी नहीं लिखता nohup.out। (५) जी हाँ, आप एक शेल स्क्रिप्ट लिख सकते हैं जो लूप और रन lsofकरने के लिए देख सकती है कि क्या nohup.outअभी भी खुला है। लेकिन यह एक अलग जवाब होगा। (६) यदि आपने ऐसा किया है, तो भी यह अविश्वसनीय होगा। यदि किसी अन्य प्रक्रिया ने nohup.outफ़ाइल को खोला तो क्या होगा ? आप वास्तव में जांचना चाहेंगे कि क्या यह विशिष्ट प्रक्रिया nohup.outखुली थी । (() लेकिन, अगर आप ऐसा करने जा रहे हैं, तो बस यह जाँचें कि क्या प्रक्रिया चल रही है?