소스 검색

dump a trace on SIGUSR2

Marian Beermann 8 년 전
부모
커밋
0ff76bdc9d
1개의 변경된 파일7개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      borg/archiver.py

+ 7 - 0
borg/archiver.py

@@ -3,6 +3,7 @@ from datetime import datetime
 from hashlib import sha256
 from operator import attrgetter
 import argparse
+import faulthandler
 import functools
 import inspect
 import os
@@ -2021,6 +2022,11 @@ def sig_info_handler(sig_no, stack):  # pragma: no cover
                 break
 
 
+def sig_trace_handler(sig_no, stack):  # pragma: no cover
+    print('\nReceived SIGUSR2 at %s, dumping trace...' % datetime.now().replace(microsecond=0), file=sys.stderr)
+    faulthandler.dump_traceback()
+
+
 def main():  # pragma: no cover
     # Make sure stdout and stderr have errors='replace') to avoid unicode
     # issues when print()-ing unicode file names
@@ -2036,6 +2042,7 @@ def main():  # pragma: no cover
          signal_handler('SIGHUP', raising_signal_handler(SigHup)), \
          signal_handler('SIGTERM', raising_signal_handler(SigTerm)), \
          signal_handler('SIGUSR1', sig_info_handler), \
+         signal_handler('SIGUSR2', sig_trace_handler), \
          signal_handler('SIGINFO', sig_info_handler):
         archiver = Archiver()
         msg = None