मेरे पास एक बाहरी प्रक्रिया है जो फ़ाइल को लिखना शुरू करती है।
मैं स्क्रिप्ट कैसे लिखूं जो फ़ाइल बंद होने तक प्रतीक्षा करता है (जब दूसरी प्रक्रिया लेखन के साथ की जाती है)।फ़ाइल बंद होने तक प्रतीक्षा कैसे करें
उत्तर
इस लक्ष्य को हासिल करने के कई तरीके होते हैं:
यदि आप कर सकते हैं, तो अपनी स्क्रिप्ट से प्रक्रिया शुरू करें। जब प्रक्रिया समाप्त हो जाती है तो स्क्रिप्ट जारी रहेगी और इसका मतलब है कि यह फ़ाइल में कोई और डेटा नहीं लिख सकता है।
यदि आप प्रक्रिया को नियंत्रित नहीं कर सकते हैं लेकिन आप जानते हैं कि प्रक्रिया फ़ाइल लिखने के बाद समाप्त हो जाती है, तो आप प्रक्रिया आईडी का पता लगा सकते हैं और फिर जांच सकते हैं कि प्रक्रिया अभी भी
kill -0 $PID
के साथ चल रही है या नहीं। यदि$?
0
है, तो प्रक्रिया अभी भी जिंदा है।यदि यह संभव नहीं है, तो आप इस प्रक्रिया के लिए सभी खुली फ़ाइलों की सूची प्राप्त करने के लिए
lsof -np $PID
का उपयोग कर सकते हैं और जांच सकते हैं कि आपकी फ़ाइल सूची में है या नहीं। हालांकि, यह कुछ हद तक धीमा है।
[संपादित करें] नोट है कि इन सभी दृष्टिकोण कुछ हद तक भंगुर होते हैं। सही समाधान यह है कि बाहरी प्रक्रिया अस्थायी नाम का उपयोग करके फ़ाइल लिखती है और उसके बाद इसे जल्द ही नामित करती है।
नाम यह सुनिश्चित करता है कि हर कोई या तो पूरी फ़ाइल को सभी डेटा या कुछ भी नहीं देखता है।
आसान तरीका: स्क्रिप्ट को प्रोग्राम निष्पादित करने दें और इसे समाप्त होने तक प्रतीक्षा करें।
यह अच्छा नहीं है, और यह मुझे इसे लिखने गंदा लग रहा है ... /tmp/foo.txt फ़ाइल का परीक्षण किया जा रहा है बनाता है ...
#!/bin/bash
until [ "$(find /proc/*/fd 2> /dev/null |
xargs -i{} readlink {} |
grep -c '^/tmp/foo.txt$')" == "0" ]; do
sleep 1;
done;
लूप जब तक फ़ाइल स्थिर दृष्टिकोण है, यह आप प्रयोग के परिणामों के लिए इंतज़ार कर रहे हैं (ताकि आप वास्तविक समय घटना से निपटने की जरूरत नहीं है) काम करना चाहिए:
EXPECTED_WRITE_INTERVAL_SECONDS=1
FILE="file.txt"
while : ; do
omod=$(stat -c %Y $FILE)
# echo "OLD: $omod"
sleep $EXPECTED_WRITE_INTERVAL_SECONDS
nmod=$(stat -c %Y $FILE)
# echo "NEW: $nmod"
if [ $omod == $nmod ] ; then
break
fi
done
inotify
का उपयोग कर एक छोटा सा सी कार्यक्रम बनाएँ। कार्यक्रम चाहिए:
inotify
उदाहरण बनाएं।- रुचि के फ़ाइल पथ के लिए
IN_CLOSE_WRITE
ईवेंट के लिए उदाहरण पर एक घड़ी जोड़ें। - घटना के लिए प्रतीक्षा करें।
- उचित कोड से बाहर निकलें।
फिर अपनी स्क्रिप्ट में, प्रोग्राम को फ़ाइल पथ के साथ तर्क के रूप में आमंत्रित करें।
आप टाइमआउट तर्क जोड़कर इसे बढ़ा सकते हैं, और विभिन्न घटनाओं को निर्दिष्ट करने की इजाजत दे सकते हैं।
- 1. स्विंगवर्कर पूरा होने तक प्रतीक्षा कैसे करें?
- 2. WebBrowser.Print() पूर्ण होने तक प्रतीक्षा करें। .NET
- 3. फ़ंक्शन लोड होने तक प्रतीक्षा करें
- 4. फ़ाइल.इक्सिस्ट तक प्रतीक्षा कैसे करें?
- 5. WatiN में पोस्टबैक पूरा होने तक प्रतीक्षा कैसे करें
- 6. रिमोट .NET डीबगर संलग्न होने तक कैसे प्रतीक्षा करें
- 7. एक्स्टजेस में सभी स्टोर लोड होने तक प्रतीक्षा कैसे करें?
- 8. सभी सबप्रोसेस खत्म होने तक प्रतीक्षा प्रक्रिया?
- 9. एक शर्त होने तक प्रतीक्षा थ्रेड
- 10. jQuery .load() सामग्री लोड होने तक प्रतीक्षा करें
- 11. कंसोल एप्लिकेशन निष्क्रिय होने तक मैं कैसे प्रतीक्षा करूं?
- 12. jQuery एसिंक एजेक्स कॉल समाप्त होने तक प्रतीक्षा करें
- 13. सर्वर पक्ष पर मॉन्गो के कनेक्शन तक तैयार होने तक क्लाइंट साइड पर कैसे प्रतीक्षा करें?
- 14. jQuery अजाक्स: * async * अनुरोध सफलता तक जारी होने तक प्रतीक्षा कैसे करें?
- 15. जब तक उपयोगकर्ता टाइपिंग बंद नहीं करता तब तक फ़ंक्शन की प्रतीक्षा करें
- 16. फ़ाइल पूरी तरह से लिखे जाने तक प्रतीक्षा करें
- 17. संदेश बॉक्स बंद होने तक कंपन करें विंडोज फोन 7
- 18. jQuery ईवेंट ऑर्डर और एनीमेशन पूर्ण होने तक प्रतीक्षा
- 19. क्लाइंट को बंद होने तक सॉकेट को कैसे खोलें?
- 20. jQuery - स्लाइडअप के अंत तक प्रतीक्षा करें()
- 21. QML: जब तक प्रतीक्षा करें एनिमेशन समाप्त
- 22. पेज रीफ्रेश किए जाने तक प्रतीक्षा करें
- 23. बाहरी प्रक्रिया पूरी होने तक प्रतीक्षा कर रहा है
- 24. कोई प्रभाव समाप्त होने तक प्रतीक्षा करने के लिए jQuery कैसे प्राप्त करें?
- 25. QUNit, JQuery और iframe के साथ यूआई-टेस्ट - नया पृष्ठ लोड होने तक प्रतीक्षा कैसे करें?
- 26. डोजो के लिए कोई तत्व मौजूद होने तक प्रतीक्षा कैसे करें?
- 27. पावरशेल के साथ एक एप्लिकेशन चलाएं और इसे समाप्त होने तक प्रतीक्षा करें
- 28. एचटीएमएल तत्वों को कक्षा प्राप्त होने तक प्रतीक्षा करें, फिर कुछ करें
- 29. एजेंट नौकरी शुरू करने और पूर्ण होने तक प्रतीक्षा करें और सफलता या विफलता प्राप्त करें
- 30. जावा: निष्पादन प्रक्रिया के लिए प्रतीक्षा करें जब तक यह
कैसे '' के बारे में! lsof -/path/to/file'? – RubyTuesdayDONO
@RubyTuesdayDONO: इसके बारे में क्या? –
मैं यह पूछने के लिए एक और सीधा तरीका बता रहा था कि क्या किसी भी प्रक्रिया में उस विशिष्ट फ़ाइल को खुली है (बनाम 'grep''ing सबसे अधिक संभावित प्रक्रिया द्वारा खुली सभी फ़ाइलों की सूची के माध्यम से)।एक बार समाप्त होने पर अस्थायी फ़ाइलों को बदलने के लिए आपकी माध्यमिक अनुशंसा एक बेहतर विकल्प की तरह लगती है - मैं सिर्फ यह कहना चाहता हूं कि 'lsof' एक वांछित कमांड है जिसमें कई वांछित वांछित जानकारी पर होमिंग के लिए एक परिष्कृत कमांड है। – RubyTuesdayDONO