मैं लिनक्स पर चल रही प्रक्रिया के गैर-घुसपैठ वाले coredump को लेने का एक तरीका ढूंढ रहा हूं।
मैं gdb से परिचित हूं gcore
, लेकिन यह केवल तभी चलाया जा सकता है जब gdb
प्रक्रिया से जुड़ा हो और यह डिबगिंग के लिए बंद हो। एक बड़े कोर डंप के लिए, जिसका अर्थ है कई सेकंड, या कुछ मिनट भी, बाधित निष्पादन के लिए।
क्या कोई गैर-अवरुद्ध विकल्प है?
लिनक्स कॉपी-ऑन-राइट मेमोरी का समर्थन करता है, जो इसे fork()
बिना समर्थन के लिए निर्भर करता है exec()
। इसलिए मैं कुछ कर्नेल-स्तर के बारे में सोच रहा हूं जहां कर्नेल प्रक्रिया के टेबल पेज की कॉपी-ऑन-राइट स्नैपशॉट लेता है, जिसे डंप किया जा रहा है, तब कोर लिखते हैं जबकि मूल प्रक्रिया चलती रहती है।
मुझे पूरा यकीन है कि मैं तब बच्चे को डंप gdb
करने के लिए उपयोग कर सकता fork()
था, जबकि माता-पिता खुशी से ले जाते हैं, फिर wait()
माता-पिता में समाप्ति के बाद बच्चे को वापस लेने के लिए। यह गन्दा है, हालाँकि, और अभी भी मूल प्रक्रिया के दो व्यवधानों की आवश्यकता है, भले ही यह संक्षिप्त हो।
इससे पहले निश्चित रूप से किसी की जरूरत है?