प्रक्रिया को मारे बिना डंप प्रक्रिया कोर


12

क्या वास्तव में प्रक्रियाओं को मारे बिना एक प्रक्रिया के लिए एक कोर डंप (या कुछ समान) प्राप्त करने का एक तरीका है? मेरे पास एक मल्टीथ्रेडेड पायथन प्रक्रिया है जो एक एम्बेडेड सिस्टम पर चल रही है। और मैं सामान्य परिस्थितियों में प्रक्रिया का एक स्नैपशॉट प्राप्त करने में सक्षम होना चाहता हूं (यानी चलने के लिए आवश्यक अन्य प्रक्रियाओं के साथ), लेकिन मुझे pdthon प्रक्रिया के बिना gdb (या इसे gdb के तहत चलाने) से कनेक्ट करने के लिए पर्याप्त मेमोरी नहीं है केवल एक ही चल रहा है।

मुझे उम्मीद है कि यह सवाल समझ में आता है।


यदि यह केवल डिबगिंग करते समय है, तो क्या आपने एनएफएस फ़ाइल या नेटवर्क ब्लॉक डिवाइस पर स्वैप की तरह कुछ पागल माना है?
गिल्स एसओ- बुराई को रोकना '

जवाबों:


13

सामान्य चाल के लिए कुछ है (संभवतः एक संकेत की तरह SIGUSR1) कार्यक्रम को गति प्रदान करता है fork(), फिर बच्चा abort()खुद को डंप कोर बनाने के लिए कहता है।

from os import fork, abort
(...)
def onUSR1(sig, frame):
    if os.fork == 0:
        os.abort

और आरंभीकरण के दौरान

from signal import signal, SIGUSR1
from wherever import onUSR1
(...)
signal.signal(signal.SIGUSR1, wherever.onUSR1)

इस तरह से उपयोग किया जाता है, forkबहुत अधिक मेमोरी का उपभोग नहीं करेगा क्योंकि लगभग सभी पता स्थान साझा किए जाएंगे (यही वजह है कि यह कोर डंप उत्पन्न करने के लिए काम करता है)।

एक बार undumpजटिल चालन के बाद एक छवि को बचाने के लिए एक कोर डंप से एक निष्पादन योग्य बनाने के लिए बुलाए गए कार्यक्रम के साथ इस चाल का उपयोग किया गया था ; emacsसे एक प्रीलोडेड छवि उत्पन्न करने के लिए इसका उपयोग किया जाता है temacs


5

आप प्रयोग करके देख सकते हैं gcore। क्या यह आपके लिए एक विकल्प है?


कुछ बिंदु पर gcore एक स्टैंड-अलोन प्रोग्राम था, लेकिन मुझे नहीं लगता कि यह अब gdb पैकेज का हिस्सा है - हालाँकि आप gdb --pid = <PID> चला सकते हैं और फिर कोर फाइल को डंप करने के लिए इसे gcore कमांड का उपयोग कर सकते हैं। gcore.c एक काफी सरल प्रोग्राम है जो आसानी से googlable है यदि आप कुछ हल्का वजन चाहते हैं।
सिंथेसाइजरपैटल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.