2010-01-29 43 views
8

Tôi đang xử lý máy chủ được viết bằng python bị khóa và ngừng hoạt động, bao gồm cả ghi nhật ký. Tôi tự hỏi nếu có một python tương đương với java "kill -3" tín hiệu mà ít nhất là in stacktrace hiện tại.Làm thế nào để buộc máy ảo của python in dấu vết ngăn xếp?

+2

'giết -2' gửi SIGINT, đó có ít nhất trên Linux dường như chuyển thành một' ngoại lệ KeyboardInterrupt'. Điều đó có thể gây ra một dấu vết ngăn xếp được bán phá giá ở đâu đó. Nó phụ thuộc vào máy chủ của khóa học. –

Trả lời

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

Nếu máy chủ "khóa", nó không nhất thiết phải nhận được tín hiệu SIGQUIT, tôi đoán vậy. – AndiDog

+0

@AndiDog: Tôi nghĩ bạn phải sử dụng 'kill (1)' để gửi nó khi bạn tự phát hiện ra rằng nó đã bị khóa. – SamB

4

Sử dụng mô-đun faulthandler. https://pypi.python.org/pypi/faulthandler/

import faulthandler 
faulthandler.register(signal.SIGUSR1) 

này hoạt động bên ngoài của tín hiệu Python của vòng lặp thông dịch viên của xử lý ở mức độ C, do đó nó sẽ làm việc ngay cả khi trình thông dịch Python bản thân được treo chờ đợi vào cái gì khác.

Xem thêm: http://docs.python.org/dev/library/faulthandler

+0

Như bạn gợi ý, 'faulthandler' được đưa vào thư viện chuẩn từ Python 3.3+ – rescdsk

Các vấn đề liên quan