निंदा "<अनुप्रयोग> अप्रत्याशित रूप से छोड़ दें" संदेश sigquit पर


18

मैं Ctrl\कभी-कभी दबाकर (आमतौर पर मेरे अपने जो दुर्व्यवहार कर रहे हैं) SIGQUIT के साथ पायथन प्रक्रियाओं को मारते हैं। क्या मैं "पायथन को अप्रत्याशित रूप से छोड़ दिया" संदेश को रोक सकता हूं? मुझे पता है कि मैं सिर्फ पलायन कर सकता हूं, इसलिए यह इतना बुरा नहीं है।

"पायथन अप्रत्याशित रूप से छोड़ दिया।"  संवाद


1
आप इसके बजाय नियंत्रण-सी का उपयोग क्यों नहीं करते? SIGTERM संदेश का कारण नहीं बनता है।
उघौवगफह

@ughoavgfhw मैं एक REPL पर काम कर रहा हूं, जो कभी-कभी टर्मिनल को कच्चे मोड में डाल देता है, इसलिए मेरा प्रोग्राम ctrl-c को कीस्ट्रोके के रूप में प्राप्त करता है। इसके अलावा कभी-कभी मुझे थ्रेड की समस्या होती है, जैसे कि थ्रेड्स जो मरना चाहिए था, और पायथन ctrl-c में केवल मुख्य थ्रेड को मारने के लिए लगता है। (मुझे पता है कि मुझे t.daemon = Trueइन पर उपयोग करना चाहिए , और मैं सबसे अधिक भाग के लिए हूं) विभिन्न कारणों से, कभी-कभी मुझे ctrl- \ का उपयोग करने की आवश्यकता होती है।
थॉमस

यदि यह आपका कोड है तो विकास के मुद्दे पर आपके कोड को संकेतों से निपटना होगा
user151019

@ मर्क सहमत - यह एक समस्या थी जबकि मेरे पास अभी तक कुछ विशिष्ट मामलों में काम करने का व्यवहार नहीं था।
थॉमस

जवाबों:


18

यदि आप क्रैश रिपोर्ट संवाद कभी नहीं देखना चाहते हैं, तो उन्हें अक्षम करने की प्राथमिकता है:

defaults write com.apple.CrashReporter DialogType none

परिवर्तनों को लागू करने के लिए लॉग आउट करें और वापस जाएं।


2
मेरे मामले में लॉग आउट की आवश्यकता नहीं थी।
कोरी क्लेन

6
क्या defaults write com.apple.CrashReporter DialogType noneकेवल एक विशेष ऐप के लिए चयन करने का कोई तरीका है ?
सेक्सीबिट

मेरे लिए यह व्यवहार परिवर्तित नहीं हुआ (कमांड दर्ज करने के बाद) लॉगआउट होने तक और लॉग इन करने के लिए।
r_alex_hall

12

आप संदेश को अधिसूचना के रूप में भी दिखा सकते हैं:

defaults write com.apple.CrashReporter UseUNC 1

2
इस तरह। MacOS Sierra पर एक सूचना बैनर स्क्रीन के ऊपर दाईं ओर स्लाइड करता है और अपने आप ही गायब हो जाएगा, लेकिन यदि आप इसे क्लिक करते हैं तो आपको मूल पूर्ण क्रैश डंप विंडो मिलती है। तो यह एकदम सही है। बहुत कम अप्रिय लेकिन विकल्प खुला छोड़ देता है।
स्पष्ट करें

3

SIGQUIT प्राप्त करते समय डिफ़ॉल्ट व्यवहार कोर और निकास को डंप करना है; क्रैश रिपोर्टर को इस प्रक्रिया के एक भाग के रूप में शुरू किया जाता है।

10.5 (?) के साथ शुरू करने से बस दुर्घटना रिपोर्टर से बचने के लिए सिगिट के लिए सिग्नल हैंडलर पर्याप्त होना चाहिए; आप शायद हैंडलर को भी निकास कहना चाहेंगे।

import signal, sys, os

def sigquit_handler(signum, frame):
    print 'SIGQUIT received; exiting'
    sys.exit(os.EX_SOFTWARE)

signal.signal(signal.SIGQUIT, sigquit_handler)

# Do your normal work instead of this
print 'Waiting for a signal...'
signal.pause()

उपरोक्त कोड का परीक्षण 10.8.5 पर किया गया था, /usr/bin/pythonजिसके विरुद्ध 2.7.2 है।


1
क्या defaults write com.apple.CrashReporter DialogType noneकेवल एक विशेष ऐप के लिए चयन करने का कोई तरीका है ?
सेक्सीबिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.