2008-10-10 23 views
11

मैं सोच रहा था कि "कोर" फ़ाइल उत्पन्न करना संभव है, अगर किसी अन्य मशीन पर कॉपी करें और फिर उस मशीन पर कोर फ़ाइल का निष्पादन जारी रखें?क्या आप सी/सी ++ प्रक्रिया को फ्रीज कर सकते हैं और इसे एक अलग मेजबान पर जारी रख सकते हैं?

मैंने गकोर उपयोगिता देखी है जो चल रही प्रक्रिया से कोर फ़ाइल बनायेगी। लेकिन मुझे नहीं लगता कि जीडीबी मूल फ़ाइल के आधार पर निष्पादन जारी रख सकता है।

वहाँ किसी भी तरह से सिर्फ ढेर/ढेर डंप और और बहाल करने के लिए बाद में किसी समय उन है?

+1

क्या इस C/C++ के साथ क्या करना मिला है? – camh

+1

कैम के साथ सहमत हैं, क्या आप कृपया सी/सी ++ संदर्भ को हटा सकते हैं। आपके पास एक प्रक्रिया हो सकती है, जिसका कोड पूरी तरह से एएसएम है और सवाल मान्य है। –

उत्तर

4

आधुनिक सिस्टम पर, कोर फ़ाइल से नहीं, आप नहीं कर सकते हैं। लिनक्स पर एक व्यक्तिगत प्रक्रिया को ठंडा करने और बहाल करने के लिए, CryoPID और नए Kernel-based checkpoint and restart काम में हैं, लेकिन उनकी क्षमताएं वर्तमान में काफी सीमित हैं। OpenVZ और अन्य वर्चुअलाइजेशन-जैसे सॉफ़्टवेयर एक संपूर्ण सिस्टम को फ्रीज और पुनर्स्थापित कर सकते हैं।

5

इसे process migration कहा जाता है।

mosix और OpenMosix ऐसा करने में सक्षम होने के लिए उपयोग किया जाता था। आजकल पूरे वीएम माइग्रेट करना सबसे आसान है।

-1

मुझे विश्वास नहीं है कि यह संभव है। हालांकि, आप वर्चुअलाइजेशन सॉफ़्टवेयर को देखना चाहेंगे - उदा। Xen - जो पूरे सिस्टम छवियों को मशीन से दूसरे में स्थिर और स्थानांतरित करना संभव बनाता है।

2

यह सामान्य रूप से, किसी अन्य मशीन पर मनमाने ढंग से प्रक्रिया जारी रखने के लिए पर्याप्त नहीं होगा। ढेर और ढेर राज्य के अलावा, I/O हैंडल, आवंटित हार्डवेयर संसाधन इत्यादि भी खोल सकते हैं।

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

ने कहा, CryoPID ठीक से ऐसा करने का प्रयास करता है और कभी-कभी सफल होता है।

1

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

मुझे लगता है कि यह एक यादृच्छिक कार्यक्रम के लिए करना बहुत मुश्किल होगा, लेकिन यदि आपने एक ढांचा लिखा है जहां सभी ऑब्जेक्ट्स क्रमबद्धता/deserialisation का समर्थन करते हैं, तो आप अपने प्रोग्राम द्वारा उपयोग की जाने वाली सभी वस्तुओं को क्रमबद्ध कर सकते हैं, और उसके बाद कहीं और जहाज भेज सकते हैं, और दूसरी तरफ उन्हें deserialise।

वर्चुअलाइजेशन के बारे में अन्य लोगों के जवाब भी स्पॉट पर हैं।

0

मशीन पर निर्भर करता है। उदाहरण के लिए, यह बहुत ही कम एम्बेडेड सिस्टम में बहुत ही कामयाब है। मुझे लगता है कि यह कुछ हद तक बीओवुल्फ़ क्लस्टर्स और अन्य सुपरकंप्यूट्रेस्क ऐप्स में भी लागू किया गया है।

3

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

0

ऐसे कई कारण हैं जो आप आसानी से नहीं कर सकते हैं। उदाहरण के लिए, जब आप दूसरी मशीन पर कोर फ़ाइल को पुनर्स्थापित करते हैं तो आप फ़ाइल डिस्क्रिप्टर को कैसे हल करते हैं जिसे आपने संसाधित किया था? सॉकेट, नामित पाइप, सेमफोर, या किसी अन्य ओएस-स्तरीय संसाधन के बारे में क्या? असल में जब तक कि आपका सिस्टम विशेष रूप से ऐसे ऑपरेशन को संभालने के लिए डिज़ाइन नहीं किया गया है, तो आप कोर फ़ाइल को निष्क्रिय रूप से डंप नहीं कर सकते हैं और इसे किसी अन्य मशीन पर ले जा सकते हैं।

1

फरवरी 2017 तक, एक काफी स्थिर और परिपक्व उपकरण है, जिसे CRIU कहा जाता है जो संस्करण 3.11 में किए गए लिनक्स कर्नेल के अपडेट पर निर्भर करता है (जैसा कि यह सितंबर 2013 में किया गया था, अधिकांश आधुनिक distros में शामिल होना चाहिए उनके कर्नेल संस्करण)।

इसे sudo apt-get install criu पर कॉल करके योग्यता के माध्यम से स्थापित किया जा सकता है।

Instructions on how to use it.

संबंधित मुद्दे

 संबंधित मुद्दे