# HG changeset patch # User Bernhard Urban # Date 1394559409 -3600 # Node ID e71d421370f3b3adfc3b4ced6290aa570538771e # Parent d2e4b81fd8f0313e269bcca1506712e736ff0b8c mx: proxy SIGQUIT to child process useful to get a jstack like output diff -r d2e4b81fd8f0 -r e71d421370f3 mxtool/mx.py --- a/mxtool/mx.py Tue Mar 11 18:36:20 2014 +0100 +++ b/mxtool/mx.py Tue Mar 11 18:36:49 2014 +0100 @@ -1092,10 +1092,10 @@ def run_java(args, nonZeroIsFatal=True, out=None, err=None, cwd=None, addDefaultArgs=True): return run(java().format_cmd(args, addDefaultArgs), nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd) -def _kill_process_group(pid): +def _kill_process_group(pid, sig=signal.SIGKILL): pgid = os.getpgid(pid) try: - os.killpg(pgid, signal.SIGKILL) + os.killpg(pgid, sig) return True except: log('Error killing subprocess ' + str(pgid) + ': ' + str(sys.exc_info()[1])) @@ -1464,6 +1464,15 @@ return result +def quit_handler(signum, frame): + p, _ = _currentSubprocess + if p is not None: + if get_os() == 'windows': + log("mx: implement me! want to send SIGQUIT to my child process") + else: + _kill_process_group(p.pid, sig=signal.SIGQUIT) + time.sleep(0.1) + def abort(codeOrMessage): """ Aborts the program with a SystemExit exception. @@ -4066,6 +4075,9 @@ def term_handler(signum, frame): abort(1) signal.signal(signal.SIGTERM, term_handler) + + signal.signal(signal.SIGQUIT, quit_handler) + try: if opts.timeout != 0: def alarm_handler(signum, frame):