अपग्रेड कार्य के दौरान रनिंग एप्लिकेशन बायनेरी को कैसे अपडेट किया जाता है?


23

मैंने अभी-अभी अपने ubuntu ल्यूसिड को नैट्टी में अपग्रेड किया, अपग्रेड के दौरान इसने अधिकांश रनिंग एप्लिकेशन को एक नए संस्करण के साथ बदल दिया।

यह कैसे काम करता है? (क्या एप्लिकेशन क्रैश नहीं होगा?) अगर एक लीब फाइल अपग्रेड हो गई और एक रनिंग एप्लिकेशन जो एक पुराने लिबास की तलाश में है, उसे लोड करने की कोशिश करने से क्या होगा?


अच्छा सवाल है, लेकिन शायद यहाँ बेहतर पूछा: unix.stackexchange.com (मुझे पता है कि URL यूनिक्स कहता है, लेकिन वे लिनक्स लिनक्स सवाल भी कहते हैं!)

लिनक्स की जगह-पर-खुली कार्यक्षमता को समझना ऐसा लगता है जैसे यह अभी भी प्रोग्रामिंग कर रहा है (लेकिन अभी मुश्किल से :)
बोंडलन

2
@bdonlan: यदि आप अपनी प्रक्रिया के दौरान गतिशील रूप से पुस्तकालयों को लोड कर रहे हैं, तो आपको इसके बारे में बहुत अधिक जानकारी होनी चाहिए, अन्यथा यह आपको काट सकता है। यह विशेष रूप से महत्वपूर्ण है यदि आप कुछ असामान्य करने की कोशिश कर रहे हैं, जैसे कि आत्म-संशोधन कोड आदि लेकिन हां, यह सीमा रेखा है।
पिस्कवर

1
यह स्व-संशोधन कोड के लिए वास्तव में प्रासंगिक नहीं है, लेकिन यह निश्चित रूप से कुछ है जो किसी व्यक्ति को लिनक्स के लिए पुस्तकालयों को लिखना चाहिए, हाँ। :)
बोल्डन

1
@Piskvor, gcc के लिए मल्टी-स्टेज संकलन प्रक्रिया की तरह एक सा लगता है :) लेकिन मूल रूप से केवल कंपाइलर ही ऐसा कुछ करते हैं, और आमतौर पर आप सिस्टम को अपग्रेड नहीं करते हैं जबकि आप इसे करते हैं (भले ही आप करते हैं, जब तक आप डॉन करते हैं 'टी ढाल कुछ भी, जबकि यह, आप ठीक, इस प्रक्रिया में है, क्योंकि यह कुछ भी करने की अपनी निजी तौर पर संकलित प्रतियां जहां यह मायने रखती है) का उपयोग किया जाएगा
bdonlan

जवाबों:


31

लिनक्स (और अन्य यूनिक्स) एक फ़ाइल ( लिंक ) के नाम के बीच एक अंतर खींचता है , फ़ाइल खुद (अक्सर इनोड के साथ पहचानी जाती है ), और फ़ाइल के लिए खुले हैंडल। जब आप किसी फ़ाइल को हटाने के लिए जाते हैं, तो आप कॉल को कॉल करते हैं - यह फ़ाइल के लिंक को मिटा देता है (आप इसे एक अलग इनोड के साथ अधिलेखित करने के लिए भी उपयोग कर सकते हैं )। हालाँकि, अगर फ़ाइल को खुले हैंडल (या अन्य लिंक - फ़ाइलों में कई हार्डलिंक हो सकते हैं ) रहते हैं, तो इनोड रहता है, और फ़ाइल सामग्री तब तक रहती है, जब तक कि सभी लिंक और हैंडल चले नहीं जाते।unlink()rename()

इसलिए लाइब्रेरी का उपयोग करके प्रोग्राम चलाना या जो भी हो पुराने संस्करण को संभाल कर रखें (अक्सर मेमोरी मैपिंग के माध्यम से), इसलिए यह डिस्क पर रहता है। इसका अभी कोई फ़ाइल नाम नहीं है, और इसे तब साफ किया जाएगा जब सभी प्रोग्राम इसे बंद कर (या अगले रिबूट पर, फाइलसिस्टम चेक या जर्नल रीप्ले के दौरान)।

इसके अलावा, ध्यान दें कि 'पुराने पुस्तकालय' की अपेक्षा करने वाले कार्यक्रम पुस्तकालय के नए संस्करणों के साथ ठीक काम करेंगे। लिनक्स पुस्तकालयों को एक फ़ाइलनाम ('सोनमे') सौंपा गया है जो पुस्तकालय द्वारा प्रस्तुत एबीआई (एप्लीकेशन बाइनरी इंटरफेस) के संस्करण को दर्शाता है। उदाहरण के लिए, मेरे सिस्टम पर C लाइब्रेरी है libc.so.6। कोई भी प्रोग्राम libc के पुराने संस्करण के विरुद्ध संकलित किया गया है, लेकिन फिर भी 6 ABI के संस्करण को लागू करने वाले libc का एक संस्करण, इसके साथ ठीक काम करेगा। वास्तव में पुराने प्रोग्राम एक के लिए दिखेगा libc.so.5या libc.so.4या कुछ और के बजाय; इस मामले में, आपको पुराने संस्करण को भी अपने पास रखना होगा - लेकिन चूंकि फ़ाइल नाम अलग है, इसलिए यह कोई समस्या नहीं है।


9

विंडोज के विपरीत, आप एक खुली फ़ाइल को हटा या बदल सकते हैं ; सरलीकृत स्पष्टीकरण देने के लिए, फ़ाइलों के लिए नए अनुरोध नई फ़ाइल को खोलते हैं, मौजूदा हैंडल उस फ़ाइल का उपयोग करते हैं जो उनके द्वारा बनाए जाने पर मौजूद थी। दूसरे शब्दों में, लिनक्स में आपके पास फ़ाइल / फ़ाइल संस्करण हो सकते हैं जो अभी भी मौजूद हैं, हालांकि निर्देशिका संरचना में उनके लिए कोई संकेतक नहीं है; जो तार मौजूद हैं, उनका कोई संकेतक नहीं है (बंद और सभी)।

आमतौर पर एक रनिंग ऐप आवश्यक पुस्तकालयों को सामने तक लोड करता है, इसलिए आपके द्वारा वर्णित समस्या केवल विशिष्ट समय स्थितियों में होती है जबकि पैकेज स्थापित किया जा रहा है: चल रहे ऐप्स अभी भी लाइब्रेरी के पुराने संस्करण का उपयोग कर रहे हैं, नए शुरू किए गए एप्लिकेशन नए का उपयोग करते हैं एक।

इसका उपयोग न केवल डिस्ट्रो अपग्रेड में किया जाता है, बल्कि हर पैकेज अपग्रेड पर होता है (डिस्ट-अपग्रेड बस उस प्रक्रिया में कुछ और ऑटोमैटिक कदम जोड़ता है)।


0

कई लिनक्स प्रक्रियाएं उन पैकेजों के बाद भी काम करना जारी रखती हैं, जिनसे वे आते हैं, उन्हें अपग्रेड किया गया है - लेकिन कुछ नहीं। मेरे अनुभव में, केडीई कभी ठीक से काम नहीं करता है यदि आप इसे चलाते समय अपग्रेड करते हैं। आपको लॉग आउट करने के लिए क्रैश और / या विफलताओं का अनुभव होने की संभावना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.