बस यहाँ कैसे देखा जाता है कि समस्या यह है कि आपको इंतजार करना होगा कि आप अपनी स्क्रिप्ट से जो प्रोग्राम चलाते हैं, उनकी नौकरी खत्म हो जाए।
यदि आपकी स्क्रिप्ट में आप पृष्ठभूमि में प्रोग्राम चलाते हैं तो आप कुछ और कोशिश कर सकते हैं।
सामान्य रूप से कॉल करने sync
से पहले आप फ़ाइल सिस्टम बफर को फ्लश करने की अनुमति देते हैं और थोड़ी मदद कर सकते हैं।
यदि स्क्रिप्ट में आप पृष्ठभूमि में कुछ प्रोग्राम शुरू करते हैं ( &
), तो आप स्क्रिप्ट से बाहर निकलने से पहले इंतजार कर सकते हैं । यह कैसे आप नीचे देख सकते हैं कार्य कर सकते हैं के बारे में एक विचार है
#!/bin/bash
program_1 &
PID_PROGRAM_1=${!}
program_2 &
wait ${!}
daemon_1 &
program_3 &
PID_PROGRAM_3=${!}
sync
wait $PID_PROGRAM_1
wait $PID_PROGRAM_3
चूंकि wait
नौकरियों के साथ-साथ PID
संख्याओं के साथ काम करना स्क्रिप्ट के अंत में एक आलसी समाधान होना चाहिए
for job in `jobs -p`
do
wait $job
done
अधिक कठिन स्थिति यह है कि अगर आप कुछ ऐसा चलाते हैं जो पृष्ठभूमि में कुछ और चलाए क्योंकि आपको खोज करना है और इंतजार करना है (यदि यह मामला है) सभी बच्चे की प्रक्रिया का अंत : उदाहरण के लिए यदि आप एक डेमॉन चलाते हैं तो शायद ऐसा नहीं है इसे खत्म करने के लिए :-)
ध्यान दें:
प्रतीक्षा $ {!} का अर्थ है "अंतिम पृष्ठभूमि प्रक्रिया पूरी होने तक प्रतीक्षा करें" जहां अंतिम पृष्ठभूमि प्रक्रिया का $!
पीआईडी है। तो wait ${!}
बस के बाद डाल program_2 &
करने के लिए program_2
इसे सीधे पृष्ठभूमि में भेजने के बिना निष्पादित करने के बराबर है&
की मदद से wait
:
Syntax
wait [n ...]
Key
n A process ID or a job specification