Ver código fonte

dump a trace on SIGUSR2

Marian Beermann 8 anos atrás
pai
commit
0ff76bdc9d
1 arquivos alterados com 7 adições e 0 exclusões
  1. 7 0
      borg/archiver.py

+ 7 - 0
borg/archiver.py

@@ -3,6 +3,7 @@ from datetime import datetime
 from hashlib import sha256
 from hashlib import sha256
 from operator import attrgetter
 from operator import attrgetter
 import argparse
 import argparse
+import faulthandler
 import functools
 import functools
 import inspect
 import inspect
 import os
 import os
@@ -2021,6 +2022,11 @@ def sig_info_handler(sig_no, stack):  # pragma: no cover
                 break
                 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
 def main():  # pragma: no cover
     # Make sure stdout and stderr have errors='replace') to avoid unicode
     # Make sure stdout and stderr have errors='replace') to avoid unicode
     # issues when print()-ing unicode file names
     # 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('SIGHUP', raising_signal_handler(SigHup)), \
          signal_handler('SIGTERM', raising_signal_handler(SigTerm)), \
          signal_handler('SIGTERM', raising_signal_handler(SigTerm)), \
          signal_handler('SIGUSR1', sig_info_handler), \
          signal_handler('SIGUSR1', sig_info_handler), \
+         signal_handler('SIGUSR2', sig_trace_handler), \
          signal_handler('SIGINFO', sig_info_handler):
          signal_handler('SIGINFO', sig_info_handler):
         archiver = Archiver()
         archiver = Archiver()
         msg = None
         msg = None