changeset 14134:e71d421370f3

mx: proxy SIGQUIT to child process useful to get a jstack like output
author Bernhard Urban <bernhard.urban@jku.at>
date Tue, 11 Mar 2014 18:36:49 +0100
parents d2e4b81fd8f0
children ee66410c0679
files mxtool/mx.py
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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):