[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