क्या `विभाजन दोष` संदेश STDERR के अंतर्गत आता है?


17

मैं एक निष्पादन योग्य में भाग गया bash

./code > log

यह टर्मिनल पर कभी-कभी त्रुटि संदेश दिखाता है जबकि सभी प्रिंटफ़ स्टेटमेंट लॉग फ़ाइल में जाते हैं। मैं इसे नीचे की तरह फिर से चलाता हूं

./code >& log

अब, सामयिक त्रुटि संदेश भी लॉग में जाते हैं। लेकिन अगर कोई विभाजन दोष है, तो यह अभी भी टर्मिनल पर दिखाया गया है। क्यों? संदेश Segmentation fault (core dumped)को लॉग फ़ाइल में कैसे जाना है?


उपयोगकर्ता $ bash --version

GNU बैश, संस्करण 4.2.24 (1) -release (i686-pc-linux-gnu)

जवाबों:


14

एक विभाजन दोष एक संकेत है, यदि आप इसे नहीं पकड़ रहे हैं तो आपका कार्यक्रम समाप्त हो जाएगा और आपका शेल इसे इसके स्टाडर (आपके प्रोग्राम के स्टाडर के बजाय) को प्रिंट करेगा।

ऐसा होने पर आपके प्रोग्राम या शेल के लिए विशिष्ट कार्य करना संभव होता है, या तो सिग्नल को पकड़ने वाले प्रोग्राम द्वारा या आपके शेल को SIGCHILD सिग्नल को फँसाने और फिर आपके बच्चे के निकास की स्थिति की जाँच करने के लिए।



2
हाँ। समझ गया। अगर किसी की दिलचस्पी है, तो मैंने यहां क्या किया pastebin.com/QyeJYYHC
user13107

1
शेल trapकमांड ट्रैप सिग्नल को शेल में भेजती है । इसलिए यह आपके प्रोग्राम में भेजे जाने वाले को पकड़ने के लिए काम नहीं करेगा।
derobert

1
@ warl0ck यह संभव है कि जिस तरह से आप किसी भी सिग्नल को पकड़ते हैं, उसी तरह सेगफॉल्ट को पकड़ें, हालांकि इससे अपरिभाषित व्यवहार हो सकता है, लेकिन अगर आप जानते हैं कि आप जो कर रहे हैं, वह कम से कम समझदार तरीके से मरने में सक्षम हो सकता है। ओपी स्टैडर्र पर प्रिंट करना चाहता था, इस मामले में सेगफॉल्ट को पकड़ना और छपाई करना सुरक्षित है।
cjh

1
@ warl0ck: आप कर सकते हैं, यह हैंडलर में कुछ भी करने के लिए सिर्फ एक बहुत बुरा विचार है, लेकिन लॉग और निकास। हालांकि कुछ विशेष उपयोग के मामले हैं।
लिनक्स

19

"सेगमेंटेशन फॉल्ट" संदेश स्टैडर पर मुद्रित होता है, लेकिन यह शेल की मानक त्रुटि है, न कि प्रोग्राम की मानक त्रुटि। शेल इस संदेश को प्रिंट करता है जब यह पता लगाता है कि कार्यक्रम सिग्नल के कारण समाप्त हो गया है।

आप प्रोग्राम को चलाने वाली शेल स्क्रिप्ट के भाग के चारों ओर पुनर्निर्देशित करके संदेश को शांत कर सकते हैं:

{ ./code; } >&log
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.