क्या एक प्रगति कोर डंप को रोकने के लिए यूनिक्स (या लिनक्स) में एक तंत्र है?


15

मान लीजिए कि (बहुत) बड़ी प्रक्रिया क्रैश और डंपिंग कोर है, और हम अन्य जानकारी (संभवतः एक मुखर संदेश, शायद कुछ और) से इसका कारण जानते हैं।

क्या कोर डंप को पूरी तरह से उत्पन्न होने से रोकने का कोई तरीका है, क्योंकि यह इस मामले में बेकार है?

उदाहरण के लिए, कोर-डंपिंग प्रक्रिया की मार -9 कोरफाइल पीढ़ी को बाधित करेगी?

जाहिर है, अगर हमें समय से पहले पता था कि हम कोर डंप नहीं चाहते हैं, तो हम उचित रूप से या ओएस के विभिन्न कोर फ़ाइल नियंत्रण उपयोगिताओं का उपयोग कर सकते हैं।

लेकिन यह सवाल "कोर डंप इन प्रोग्रेस" स्टेज के बारे में है ...

(उदाहरण के लिए, कल्पना कीजिए कि मैं /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit में अनुरोधकर्ता हूं और 5 को बर्बाद नहीं करना चाहता -6 टीबी डिस्क स्थान :))


लिनक्स पर आप कोर डंप को जेनरेट होने से निष्क्रिय कर सकते हैं ... क्या यह एक विकल्प हो सकता है?
krisFR

नहीं - कोर डंप सामान्य रूप से आवश्यक हैं, लेकिन हम सिर्फ उन मामलों में उन्हें रोकने के लिए एक रास्ता तलाश रहे हैं जहां हम जानते हैं कि कोर की आवश्यकता के बिना समस्या क्या है, समय / डिस्क स्थान / आदि को बचाने के लिए .... बेशक हम डंपिंग को पूरा करने के बाद बस कोर को हटा सकते हैं (या इससे पहले कि इसे अनलिंक भी कर सकते हैं), लेकिन डिस्क पर कुछ गिग्स को टाई करने का कोई कारण नहीं है अगर हम सिर्फ कोर डंप को मार सकते हैं।
माइक जी।

आप संभवतः किसी निश्चित स्थिति के पूरा होने पर प्रोग्राम को कॉल करने वाली स्क्रिप्ट में "cat / dev / null> <path_to_core>" का उपयोग कर सकते हैं, इसलिए जब तक / proc / <pid> प्रविष्टि मौजूद है, हर कुछ सेकंड में सोएं और दौड़ें / कोर फ़ाइल के लिए देव / अशक्त प्रतिलिपि। यह इसे शून्य कर देगा। मैं प्रश्न के पीछे पूर्ण संदर्भ के बारे में निश्चित नहीं हूं, लेकिन यह काम कर सकता है।
Schrute

Schrute, कि कोर को हटाने के रूप में एक ही प्रभाव होगा, है ना? डिस्क स्थान और सिस्टम संसाधनों को तब भी खपत किया जाएगा जब तक कि कोर लेखन समाप्त न हो जाए - फ़ाइल का आकार सिर्फ डु या एलएस में दिखाई नहीं देगा।
माइक जी।

संसाधन हाँ, हालाँकि यह कोर / लॉग फ़ाइल जैसी बड़ी फ़ाइल से निपटने और PID को रोकने के लिए एक सामान्य तरीका है। यह सिर्फ इस बात पर निर्भर करता है कि लक्ष्य क्या है।
Schrute

जवाबों:


8

आम तौर पर: नहीं, विश्वसनीय रूप से एक coredump को मारने का कोई तरीका नहीं है।

कहा जा रहा है कि कमर्शियल * NIX के लिए कोई संभावना नहीं है (कम से कम लिनक्स में)

संभावना इस तथ्य में निहित है कि कर्नेल की 3.x श्रृंखला फ़ाइल लेखन को बाधित करने में सक्षम है। एक संभावना यह है कि डंपिंग करने वाले धागे का पता लगाएं और जब तक यह सफल न हो जाए तब तक इसे बार-बार भेजें।

यह पैच श्रृंखला कुछ स्तर पर समस्या को ठीक करती है।

अन्य संभावना coredump_pattern के लिए वैकल्पिक सिंटैक्स का उपयोग करने के लिए है। मैनुअल का कहना है कि एक पैटर्न के बजाय 2.6.19 के बाद से आप एक पाइप और एक प्रोग्राम (params के साथ) का उपयोग कर सकते हैं जो डंप को संभाल लेगा। एर्गो का नियंत्रण आपके पास होगा कि कौन से डंप को लिखा जाएगा, जहां (/ देव / अशक्त आपके बेकार कोर के लिए स्पष्ट उम्मीदवार है)।

यह पैच थोड़ा ध्यान देने योग्य भी है: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html


धन्यवाद zeridon - यह निश्चित रूप से अब तक का सबसे अच्छा जवाब है।
माइक जी।

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

0

इस लिंक को देखें, यह मददगार हो सकता है

https://publib.boulder.ibm.com/httpserv/ihsdiag/coredumps.html


जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो यहां उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
टॉम ओ'कॉनर

धन्यवाद हमीद, लेकिन जब उस लिंक में बहुत सारी रोचक जानकारी है, तो मुझे नहीं लगता कि यह मेरे सवाल का जवाब देता है (जब तक कि मैं इसे याद नहीं करता - मैं अभी तक जाग नहीं रहा हूं :))
माइक जी।

-1

ऐसा लगता है कि आप मूल डंप आकार को सीमित करने के लिए ulimit -c (मान लें कि आप बैश का उपयोग कर रहे हैं) चला सकते हैं।

देखें: /ubuntu/220905/how-to-remove-limit-on-core-dump-file-size

तथा

http://ss64.com/bash/ulimit.html


1
केरी, जैसा कि मैंने ओपी में कहा था, "जाहिर है, अगर हम समय से पहले जानते थे कि हम कोर डंप नहीं चाहते हैं, तो हम उचित रूप से अल्मीट सेट कर सकते हैं या ओएस के विभिन्न कोर फ़ाइल नियंत्रण उपयोगिताओं का उपयोग कर सकते हैं।" मैं यह देखने की कोशिश कर रहा हूं कि क्या एक कोर डंप को रोकने का एक तरीका है क्योंकि यह पहले से ही एक बहुत बड़े कार्य के लिए शुरू हो गया है (समय / डिस्क स्थान / संसाधनों को बचाने के लिए)।
माइक जी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.