लिनक्स में, निष्पादन योग्य फ़ाइल को संशोधित या हटाए जाने पर एक चल रहे कार्यक्रम का क्या होगा?


12

मान लीजिए कि /usr/local/bin/rubyपृष्ठभूमि में चल रहा है, और फिर हम rubyएक अलग संस्करण के साथ ओवरराइट करते हैं, या यहां तक ​​कि हटाते हैं ruby

माणिक प्रक्रिया चलाने वालों का क्या होगा?

जवाबों:


10

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


"यदि एक ही फ़ाइल खोली जाती है और उसके कुछ हिस्सों को बदल दिया जाता है" तो "बराबर नहीं होता है" यदि निष्पादक को हटा दिया जाता है और एक नया नाम उसी स्थान पर लिखा जाता है "?? क्या आपका मतलब है कि पुरानी फाइल में mv नई फाइल खराब है, लेकिन rm पुरानी फाइल है तो cp नई फाइल से पुरानी फाइल लोकेशन ठीक है?
जीन

4

वे चलते रहेंगे। शायद वे बुरी तरह से दुर्घटनाग्रस्त हो जाते हैं अगर वे कोशिश करते हैं और खुद पहुंचते हैं और कुछ गलत करते हैं। मैं इसे तब तक नहीं करूंगा जब तक मुझे :)


हां। जब स्क्रिप्ट चल रही होती हैं तो मैं हर समय सॉफ्टवेयर को मैन्युअल रूप से अपडेट करता हूं।
जॉन टी

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

1

माणिक प्रक्रिया चलाने वालों का क्या होगा?

  1. / usr / स्थानीय / बिन / माणिक की एक प्रति बनाएँ
  2. [अगर यह नहीं चल रहा है, भागो / usr / स्थानीय / बिन / रूबी]
  3. कोशिश: आरएम / यूएसआर / स्थानीय / बिन / माणिक
  4. और अपने लिए देखें :)

1

यह मेरी समझ है कि लिनक्स कर्नेल में लोडर नामक एक घटक होता है जो निष्पादन योग्य फ़ाइल को खोलता है, जिसमें लोडिंग / लिंकिंग प्रक्रिया के दौरान छवि होती है, और एक बार पुस्तकालयों, आदि से लिंक करने के बाद लोडर फाइल को बंद कर देता है। इस प्रकार, यह प्रक्रिया तब होती है और तब तक पूरी होती है जब कर्नेल वास्तव में प्रक्रिया को लॉन्च करता है।

मुझे यकीन नहीं है कि डिस्क पर मूल निष्पादन योग्य को संदर्भित करने की आवश्यकता है यदि निष्पादन योग्य बाद में बाहरी पुस्तकालयों को आयात करने की कोशिश करता है।

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

मेरे पास एक RAID नियंत्रक के साथ समस्या थी जो पूरे डिस्क का कारण बनता था कि रूट निर्देशिका और अन्य विभाजन को अचानक कार्य करने के लिए माउंट किया गया था जैसे कि इसे डिस्कनेक्ट किया गया था। नए कार्यक्रमों को लोड नहीं कर सका, लेकिन मेमोरी में लोग ठीक काम कर रहे थे, जब तक कि उन्हें डिस्क से फ़ाइलों की आवश्यकता नहीं थी।


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