Mercurial > hg
changeset 17465:2d4a096e213c
killdaemons: add windows implementation
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sun, 19 Aug 2012 18:06:15 +0200 |
parents | eddfb9a550d0 |
children | d5a3bda6e170 |
files | tests/killdaemons.py |
diffstat | 1 files changed, 29 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/killdaemons.py Sun Aug 19 16:41:09 2012 +0200 +++ b/tests/killdaemons.py Sun Aug 19 18:06:15 2012 +0200 @@ -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)