tests: killdaemons.py for windows waits for killed process to terminate
After kill, wait for the process to terminate. When it does not in time,
write a debug message similar as in other os. But no 2nd forceful attempt
is done.
--- a/tests/killdaemons.py Fri Jan 17 21:13:08 2014 +0100
+++ b/tests/killdaemons.py Fri Jan 17 21:13:20 2014 +0100
@@ -15,14 +15,28 @@
def kill(pid, logfn, tryhard=True):
logfn('# Killing daemon process %d' % pid)
PROCESS_TERMINATE = 1
+ SYNCHRONIZE = 0x00100000L
+ WAIT_OBJECT_0 = 0
+ WAIT_TIMEOUT = 258
handle = ctypes.windll.kernel32.OpenProcess(
- PROCESS_TERMINATE, False, pid)
+ PROCESS_TERMINATE|SYNCHRONIZE, False, pid)
if handle == 0:
# TODO: call _check(0, expected) to check if "process not found"
return # process not found, already finished
try:
_check(ctypes.windll.kernel32.TerminateProcess(handle, -1), 5)
# windows error 5 when process does not exist or no access TODO
+
+ # TODO?: forcefully kill when timeout
+ # and ?shorter waiting time? when tryhard==True
+ r = ctypes.windll.kernel32.WaitForSingleObject(handle, 100)
+ # timeout = 100 ms
+ if r == WAIT_OBJECT_0:
+ pass # process is terminated
+ elif r == WAIT_TIMEOUT:
+ logfn('# Daemon process %d is stuck')
+ else:
+ check(r) # any error
except: #re-raises
ctypes.windll.kernel32.CloseHandle(handle) # no _check, keep error
raise