2015-06-18 14 views
5

मैं कोर डंप उत्पन्न करने में सक्षम होना चाहता हूं लेकिन बाद में प्रक्रिया से बाहर नहीं निकलना चाहता हूं। मुझे निष्पादन जारी रखने की आवश्यकता नहीं है, बस मरना नहीं है। यह एक सी ++ उबंटू प्रक्रिया है।क्या कोर को डंप करना संभव है लेकिन प्रक्रिया से बाहर निकलना संभव नहीं है?

मेरा मानना ​​है कि मैं एक बहुत मानक तरीके से कोर डंपिंग कर रहा हूँ: मैं संकेत() के साथ संकेत हैंडलर की स्थापना के माध्यम से अपमानजनक संकेत पकड़ने, मैं setrlimit (के माध्यम से मूल आकार सीमा) सेट और फिर मैं कोर डंप का संकेत संकेत के साथ() और बढ़ा():

signal(SIGSEGV, OnPosixSignal); 

... 

void OnPosixSignal(int iSignal) 
{ 
    struct rlimit CoreLimit; 
    CoreLimit.rlim_cur = RLIM_INFINITY; 
    CoreLimit.rlim_max = RLIM_INFINITY; 
    setrlimit(RLIMIT_CORE, &CoreLimit); 
    signal(iSignal, SIG_DFL); 
    raise(iSignal); 
} 

वहाँ कुछ मैं कोर डंपिंग के बाद प्रक्रिया से बाहर निकलने की जरूरत नहीं करने के लिए कर सकते हैं?

अग्रिम में एक गुच्छा धन्यवाद!

+3

क्या आपने यह देखा है कि 'gcore' यह कैसे करता है? –

+0

मुझे async-safe फ़ंक्शंस की सूची में 'setrlimit() 'नहीं मिला है। क्या आप वाकई सिग्नल हैंडलर में कॉल करना एक अच्छा विचार है? – EOF

+1

'coredumper' लाइब्रेरी आपका मित्र होगा। –

उत्तर

1

तुम भी है कि gcore उपयोग कर सकते हैं:

प्रक्रिया ID पीआईडी ​​के साथ चल रहे एक कार्यक्रम के एक प्रमुख डंप उत्पन्न करें। उत्पादित फ़ाइल कर्नेल उत्पादित मूल फ़ाइल के बराबर होती है जैसे कि प्रक्रिया क्रैश हो जाती है (और यदि "ulimit -c" को उचित कोर डंप सीमा सेट करने के लिए उपयोग किया गया था)। दुर्घटना के विपरीत, गकोर के बाद कार्यक्रम बिना किसी बदलाव के चल रहा है।

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