[PATCH 1 of 2] run-tests: implement proper process killing for Windows
Adrian Buehlmann
adrian at cadifra.com
Sun Jun 17 17:35:17 CDT 2012
# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1339972395 -7200
# Node ID 954a063d12edfe1d2a3d32df1a540c0ee5268156
# Parent 191f0c6cc47c1cf85372f5e5943ca94aa14fcb65
run-tests: implement proper process killing for Windows
diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -347,6 +347,25 @@
except OSError:
pass
+if os.name == 'nt':
+ import ctypes
+ def killprocess(pid):
+ vlog('# Killing daemon process %d' % pid)
+ PROCESS_TERMINATE = 1
+ k = ctypes.windll.kernel32
+ handle = k.OpenProcess(PROCESS_TERMINATE, False, pid)
+ k.TerminateProcess(handle, -1)
+ k.CloseHandle(handle)
+else:
+ def killprocess(pid):
+ os.kill(pid, 0)
+ vlog('# Killing daemon process %d' % pid)
+ os.kill(pid, signal.SIGTERM)
+ time.sleep(0.1)
+ os.kill(pid, 0)
+ vlog('# Daemon process %d is stuck - really killing it' % pid)
+ os.kill(pid, signal.SIGKILL)
+
def killdaemons():
# Kill off any leftover daemon processes
try:
@@ -357,13 +376,7 @@
except ValueError:
continue
try:
- os.kill(pid, 0)
- vlog('# Killing daemon process %d' % pid)
- os.kill(pid, signal.SIGTERM)
- time.sleep(0.1)
- os.kill(pid, 0)
- vlog('# Daemon process %d is stuck - really killing it' % pid)
- os.kill(pid, signal.SIGKILL)
+ killprocess(pid)
except OSError, err:
if err.errno != errno.ESRCH:
raise
More information about the Mercurial-devel
mailing list