Skip to content

Commit f5fc86d

Browse files
stratakisvstinner
authored andcommitted
gh-156722, test_dtrace: Terminate tracing processes gracefully on timeout (#156753)
Send SIGTERM to the tracing process group before falling back to SIGKILL. (cherry picked from commit 55ecc0a)
1 parent 3d772fc commit f5fc86d

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

‎Lib/test/test_dtrace.py‎

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,33 @@ def normalize_trace_output(output):
7878

7979

8080
USE_PROCESS_GROUP = (hasattr(os, "setsid") and hasattr(os, "killpg"))
81+
TERMINATE_TIMEOUT = 10
8182

8283
def create_process_group(*args, **kwargs):
8384
if USE_PROCESS_GROUP:
8485
kwargs['start_new_session'] = True
8586
return subprocess.Popen(*args, **kwargs)
8687

87-
def kill_process_group(proc):
88+
def terminate_process_group(proc):
8889
if USE_PROCESS_GROUP:
8990
try:
90-
os.killpg(proc.pid, signal.SIGKILL)
91+
os.killpg(proc.pid, signal.SIGTERM)
9192
except ProcessLookupError:
9293
pass
9394
else:
94-
proc.kill()
95-
proc.communicate() # Clean up
95+
proc.terminate()
96+
97+
try:
98+
proc.communicate(timeout=TERMINATE_TIMEOUT)
99+
except subprocess.TimeoutExpired:
100+
if USE_PROCESS_GROUP:
101+
try:
102+
os.killpg(proc.pid, signal.SIGKILL)
103+
except ProcessLookupError:
104+
pass
105+
else:
106+
proc.kill()
107+
proc.communicate(timeout=TERMINATE_TIMEOUT) # Clean up
96108

97109

98110
def run_readelf(cmd):
@@ -157,7 +169,7 @@ def trace(self, script_file, subcommand=None, *, timeout=None,
157169
try:
158170
stdout, _ = proc.communicate(timeout=timeout)
159171
except subprocess.TimeoutExpired:
160-
kill_process_group(proc)
172+
terminate_process_group(proc)
161173
raise
162174
if check_returncode and proc.returncode:
163175
raise AssertionError(

0 commit comments

Comments
 (0)