[PATCH 2 of 3] killdaemons: add windows implementation
Patrick Mezard
patrick at mezard.eu
Sun Aug 19 14:22:40 CDT 2012
# HG changeset patch
# User Patrick Mezard <patrick at mezard.eu>
# Date 1345392375 -7200
# Node ID 59dcbbaf61aee7f9b534454820ea00e1bf204c74
# Parent c581659d731a035d6768b7ffb33296ebdfc3cae7
killdaemons: add windows implementation
diff --git a/tests/killdaemons.py b/tests/killdaemons.py
--- a/tests/killdaemons.py
+++ b/tests/killdaemons.py
@@ -2,6 +2,34 @@
import os, time, errno, signal
+if os.name =='nt':
+ import ctypes
+ def kill(pid, logfn, tryhard=True):
+ logfn('# Killing daemon process %d' % pid)
+ PROCESS_TERMINATE = 1
+ handle = ctypes.windll.kernel32.OpenProcess(
+ PROCESS_TERMINATE, False, pid)
+ ctypes.windll.kernel32.TerminateProcess(handle, -1)
+ ctypes.windll.kernel32.CloseHandle(handle)
+else:
+ def kill(pid, logfn, tryhard=True):
+ try:
+ os.kill(pid, 0)
+ logfn('# Killing daemon process %d' % pid)
+ os.kill(pid, signal.SIGTERM)
+ if tryhard:
+ for i in range(10):
+ time.sleep(0.05)
+ os.kill(pid, 0)
+ else:
+ time.sleep(0.1)
+ os.kill(pid, 0)
+ logfn('# Daemon process %d is stuck - really killing it' % pid)
+ os.kill(pid, signal.SIGKILL)
+ except OSError, err:
+ if err.errno != errno.ESRCH:
+ raise
+
def killdaemons(pidfile, tryhard=True, remove=False, logfn=None):
if not logfn:
logfn = lambda s: s
@@ -13,22 +41,7 @@
pid = int(line)
except ValueError:
continue
- try:
- os.kill(pid, 0)
- logfn('# Killing daemon process %d' % pid)
- os.kill(pid, signal.SIGTERM)
- if tryhard:
- for i in range(10):
- time.sleep(0.05)
- os.kill(pid, 0)
- else:
- time.sleep(0.1)
- os.kill(pid, 0)
- logfn('# Daemon process %d is stuck - really killing it' % pid)
- os.kill(pid, signal.SIGKILL)
- except OSError, err:
- if err.errno != errno.ESRCH:
- raise
+ kill(pid, logfn, tryhard)
fp.close()
if remove:
os.unlink(pidfile)
More information about the Mercurial-devel
mailing list