Mercurial > hg > graal-jvmci-8
comparison mxtool/mx.py @ 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 |
comparison
equal
deleted
inserted
replaced
14133:d2e4b81fd8f0 | 14134:e71d421370f3 |
---|---|
1090 return _java | 1090 return _java |
1091 | 1091 |
1092 def run_java(args, nonZeroIsFatal=True, out=None, err=None, cwd=None, addDefaultArgs=True): | 1092 def run_java(args, nonZeroIsFatal=True, out=None, err=None, cwd=None, addDefaultArgs=True): |
1093 return run(java().format_cmd(args, addDefaultArgs), nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd) | 1093 return run(java().format_cmd(args, addDefaultArgs), nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd) |
1094 | 1094 |
1095 def _kill_process_group(pid): | 1095 def _kill_process_group(pid, sig=signal.SIGKILL): |
1096 pgid = os.getpgid(pid) | 1096 pgid = os.getpgid(pid) |
1097 try: | 1097 try: |
1098 os.killpg(pgid, signal.SIGKILL) | 1098 os.killpg(pgid, sig) |
1099 return True | 1099 return True |
1100 except: | 1100 except: |
1101 log('Error killing subprocess ' + str(pgid) + ': ' + str(sys.exc_info()[1])) | 1101 log('Error killing subprocess ' + str(pgid) + ': ' + str(sys.exc_info()[1])) |
1102 return False | 1102 return False |
1103 | 1103 |
1461 result = expandvars(value) | 1461 result = expandvars(value) |
1462 if '$' in result or '%' in result: | 1462 if '$' in result or '%' in result: |
1463 abort('Property contains an undefined environment variable: ' + value) | 1463 abort('Property contains an undefined environment variable: ' + value) |
1464 return result | 1464 return result |
1465 | 1465 |
1466 | |
1467 def quit_handler(signum, frame): | |
1468 p, _ = _currentSubprocess | |
1469 if p is not None: | |
1470 if get_os() == 'windows': | |
1471 log("mx: implement me! want to send SIGQUIT to my child process") | |
1472 else: | |
1473 _kill_process_group(p.pid, sig=signal.SIGQUIT) | |
1474 time.sleep(0.1) | |
1466 | 1475 |
1467 def abort(codeOrMessage): | 1476 def abort(codeOrMessage): |
1468 """ | 1477 """ |
1469 Aborts the program with a SystemExit exception. | 1478 Aborts the program with a SystemExit exception. |
1470 If 'codeOrMessage' is a plain integer, it specifies the system exit status; | 1479 If 'codeOrMessage' is a plain integer, it specifies the system exit status; |
4064 | 4073 |
4065 c, _ = _commands[command][:2] | 4074 c, _ = _commands[command][:2] |
4066 def term_handler(signum, frame): | 4075 def term_handler(signum, frame): |
4067 abort(1) | 4076 abort(1) |
4068 signal.signal(signal.SIGTERM, term_handler) | 4077 signal.signal(signal.SIGTERM, term_handler) |
4078 | |
4079 signal.signal(signal.SIGQUIT, quit_handler) | |
4080 | |
4069 try: | 4081 try: |
4070 if opts.timeout != 0: | 4082 if opts.timeout != 0: |
4071 def alarm_handler(signum, frame): | 4083 def alarm_handler(signum, frame): |
4072 abort('Command timed out after ' + str(opts.timeout) + ' seconds: ' + ' '.join(commandAndArgs)) | 4084 abort('Command timed out after ' + str(opts.timeout) + ' seconds: ' + ' '.join(commandAndArgs)) |
4073 signal.signal(signal.SIGALRM, alarm_handler) | 4085 signal.signal(signal.SIGALRM, alarm_handler) |