##// END OF EJS Templates
tests: kill for windows in killdaemons.py checks return values...
Simon Heimberg -
r20493:b5f43dbf default
parent child Browse files
Show More
@@ -4,13 +4,30 b' import os, sys, time, errno, signal'
4
4
5 if os.name =='nt':
5 if os.name =='nt':
6 import ctypes
6 import ctypes
7
8 def _check(ret, expectederr=None):
9 if ret == 0:
10 winerrno = ctypes.GetLastError()
11 if winerrno == expectederr:
12 return True
13 raise ctypes.WinError(winerrno)
14
7 def kill(pid, logfn, tryhard=True):
15 def kill(pid, logfn, tryhard=True):
8 logfn('# Killing daemon process %d' % pid)
16 logfn('# Killing daemon process %d' % pid)
9 PROCESS_TERMINATE = 1
17 PROCESS_TERMINATE = 1
10 handle = ctypes.windll.kernel32.OpenProcess(
18 handle = ctypes.windll.kernel32.OpenProcess(
11 PROCESS_TERMINATE, False, pid)
19 PROCESS_TERMINATE, False, pid)
12 ctypes.windll.kernel32.TerminateProcess(handle, -1)
20 if handle == 0:
13 ctypes.windll.kernel32.CloseHandle(handle)
21 # TODO: call _check(0, expected) to check if "process not found"
22 return # process not found, already finished
23 try:
24 _check(ctypes.windll.kernel32.TerminateProcess(handle, -1), 5)
25 # windows error 5 when process does not exist or no access TODO
26 except: #re-raises
27 ctypes.windll.kernel32.CloseHandle(handle) # no _check, keep error
28 raise
29 _check(ctypes.windll.kernel32.CloseHandle(handle))
30
14 else:
31 else:
15 def kill(pid, logfn, tryhard=True):
32 def kill(pid, logfn, tryhard=True):
16 try:
33 try:
General Comments 0
You need to be logged in to leave comments. Login now