sigquit dumps thread traces

This commit is contained in:
Noah Levitt 2015-07-13 15:57:14 -07:00
parent 18ca996216
commit 6470a8ef26

View File

@ -12,6 +12,8 @@ import surt
import signal
import kombu
from umbra import hq
import pprint
import traceback
arg_parser = argparse.ArgumentParser(prog=os.path.basename(__file__),
description='crawl-url - browse urls, follow links',
@ -89,6 +91,18 @@ def sigterm(signum, frame):
def sigint(signum, frame):
raise ShutdownRequested('shutdown requested (caught SIGINT)')
def dump_state(signum, frame):
pp = pprint.PrettyPrinter(indent=4)
state_strs = []
for th in threading.enumerate():
state_strs.append(str(th))
stack = traceback.format_stack(sys._current_frames()[th.ident])
state_strs.append("".join(stack))
logging.warn("dumping state (caught signal {})\n{}".format(signum, "\n".join(state_strs)))
signal.signal(signal.SIGQUIT, dump_state)
signal.signal(signal.SIGTERM, sigterm)
signal.signal(signal.SIGINT, sigint)