mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
gh-109888: Fix test_os _kill_with_event() on Windows (#110421)
Replace os.kill() with proc.kill() which catchs PermissionError. Rewrite _kill_with_event(): * Use subprocess context manager ("with proc:"). * Use sleeping_retry() to wait until the child process is ready. * Replace SIGINT with proc.kill() on error. * Replace 10 seconds with SHORT_TIMEOUT to wait until the process is ready. * Replace 0.5 seconds with SHORT_TIMEOUT to wait for the process exit.
This commit is contained in:
parent
fb6c4ed2bb
commit
aaf297c048
1 changed files with 27 additions and 23 deletions
|
@ -2566,30 +2566,34 @@ class Win32KillTests(unittest.TestCase):
|
|||
tagname = "test_os_%s" % uuid.uuid1()
|
||||
m = mmap.mmap(-1, 1, tagname)
|
||||
m[0] = 0
|
||||
|
||||
# Run a script which has console control handling enabled.
|
||||
proc = subprocess.Popen([sys.executable,
|
||||
os.path.join(os.path.dirname(__file__),
|
||||
"win_console_handler.py"), tagname],
|
||||
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
|
||||
# Let the interpreter startup before we send signals. See #3137.
|
||||
count, max = 0, 100
|
||||
while count < max and proc.poll() is None:
|
||||
if m[0] == 1:
|
||||
break
|
||||
time.sleep(0.1)
|
||||
count += 1
|
||||
else:
|
||||
# Forcefully kill the process if we weren't able to signal it.
|
||||
os.kill(proc.pid, signal.SIGINT)
|
||||
self.fail("Subprocess didn't finish initialization")
|
||||
os.kill(proc.pid, event)
|
||||
# proc.send_signal(event) could also be done here.
|
||||
# Allow time for the signal to be passed and the process to exit.
|
||||
time.sleep(0.5)
|
||||
if not proc.poll():
|
||||
# Forcefully kill the process if we weren't able to signal it.
|
||||
os.kill(proc.pid, signal.SIGINT)
|
||||
self.fail("subprocess did not stop on {}".format(name))
|
||||
script = os.path.join(os.path.dirname(__file__),
|
||||
"win_console_handler.py")
|
||||
cmd = [sys.executable, script, tagname]
|
||||
proc = subprocess.Popen(cmd,
|
||||
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
|
||||
|
||||
with proc:
|
||||
# Let the interpreter startup before we send signals. See #3137.
|
||||
for _ in support.sleeping_retry(support.SHORT_TIMEOUT):
|
||||
if proc.poll() is None:
|
||||
break
|
||||
else:
|
||||
# Forcefully kill the process if we weren't able to signal it.
|
||||
proc.kill()
|
||||
self.fail("Subprocess didn't finish initialization")
|
||||
|
||||
os.kill(proc.pid, event)
|
||||
|
||||
try:
|
||||
# proc.send_signal(event) could also be done here.
|
||||
# Allow time for the signal to be passed and the process to exit.
|
||||
proc.wait(timeout=support.SHORT_TIMEOUT)
|
||||
except subprocess.TimeoutExpired:
|
||||
# Forcefully kill the process if we weren't able to signal it.
|
||||
proc.kill()
|
||||
self.fail("subprocess did not stop on {}".format(name))
|
||||
|
||||
@unittest.skip("subprocesses aren't inheriting Ctrl+C property")
|
||||
@support.requires_subprocess()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue