2010-01-29 11 views
8

मैं एक पायथन-लिखित सर्वर से निपट रहा हूं जो लॉक हो रहा है, और लॉगिंग सहित काम करना बंद कर देता है। मुझे आश्चर्य है कि जावा के "मार -3" सिग्नल के बराबर एक अजगर है जो कम से कम वर्तमान स्टैक्र्रेस प्रिंट करता है।एक स्टैक ट्रेस मुद्रित करने के लिए पाइथन के वीएम को कैसे बल दें?

+2

'मारने -2' SIGINT, लिनक्स पर कम से कम एक' KeyboardInterrupt' अपवाद में अनुवाद करने लगता है जो भेजता है। इससे कहीं स्टैक ट्रेस को डंप किया जा सकता है। यह पाठ्यक्रम के सर्वर पर निर्भर करता है। –

उत्तर

2
import signal, traceback 
def quit_handler(signum,frame): 
    traceback.print_stack() 
signal.signal(signal.SIGQUIT,quit_handler) 
+0

यदि सर्वर "लॉक अप" है, तो मुझे लगता है कि यह एक सिग्क्विट सिग्नल नहीं है, मुझे लगता है। – AndiDog

+0

@AndiDog: मुझे लगता है कि आपको इसे मारने के लिए 'kill (1) 'का उपयोग करना होगा जब आप मैन्युअल रूप से पता लगाएंगे कि यह लॉक हो गया है। – SamB

4

faulthandler मॉड्यूल का उपयोग करें। https://pypi.python.org/pypi/faulthandler/

import faulthandler 
faulthandler.register(signal.SIGUSR1) 

यह पायथन के दुभाषिया पाश के संकेत सी स्तर पर निपटने के बाहर काम करता है तो यह भी जब अजगर दुभाषिया ही कुछ और पर इंतजार कर लटका दिया जाता है काम करेंगे।

यह भी देखें: http://docs.python.org/dev/library/faulthandler

+0

जैसा कि आप संकेत देते हैं, 'faulthandler' को मानक लाइब्रेरी में पायथन 3.3+ से शामिल किया गया है – rescdsk

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