Show More
@@ -2,6 +2,34 b'' | |||
|
2 | 2 | |
|
3 | 3 | import os, time, errno, signal |
|
4 | 4 | |
|
5 | if os.name =='nt': | |
|
6 | import ctypes | |
|
7 | def kill(pid, logfn, tryhard=True): | |
|
8 | logfn('# Killing daemon process %d' % pid) | |
|
9 | PROCESS_TERMINATE = 1 | |
|
10 | handle = ctypes.windll.kernel32.OpenProcess( | |
|
11 | PROCESS_TERMINATE, False, pid) | |
|
12 | ctypes.windll.kernel32.TerminateProcess(handle, -1) | |
|
13 | ctypes.windll.kernel32.CloseHandle(handle) | |
|
14 | else: | |
|
15 | def kill(pid, logfn, tryhard=True): | |
|
16 | try: | |
|
17 | os.kill(pid, 0) | |
|
18 | logfn('# Killing daemon process %d' % pid) | |
|
19 | os.kill(pid, signal.SIGTERM) | |
|
20 | if tryhard: | |
|
21 | for i in range(10): | |
|
22 | time.sleep(0.05) | |
|
23 | os.kill(pid, 0) | |
|
24 | else: | |
|
25 | time.sleep(0.1) | |
|
26 | os.kill(pid, 0) | |
|
27 | logfn('# Daemon process %d is stuck - really killing it' % pid) | |
|
28 | os.kill(pid, signal.SIGKILL) | |
|
29 | except OSError, err: | |
|
30 | if err.errno != errno.ESRCH: | |
|
31 | raise | |
|
32 | ||
|
5 | 33 | def killdaemons(pidfile, tryhard=True, remove=False, logfn=None): |
|
6 | 34 | if not logfn: |
|
7 | 35 | logfn = lambda s: s |
@@ -13,22 +41,7 b' def killdaemons(pidfile, tryhard=True, r' | |||
|
13 | 41 | pid = int(line) |
|
14 | 42 | except ValueError: |
|
15 | 43 | continue |
|
16 | try: | |
|
17 | os.kill(pid, 0) | |
|
18 | logfn('# Killing daemon process %d' % pid) | |
|
19 | os.kill(pid, signal.SIGTERM) | |
|
20 | if tryhard: | |
|
21 | for i in range(10): | |
|
22 | time.sleep(0.05) | |
|
23 | os.kill(pid, 0) | |
|
24 | else: | |
|
25 | time.sleep(0.1) | |
|
26 | os.kill(pid, 0) | |
|
27 | logfn('# Daemon process %d is stuck - really killing it' % pid) | |
|
28 | os.kill(pid, signal.SIGKILL) | |
|
29 | except OSError, err: | |
|
30 | if err.errno != errno.ESRCH: | |
|
31 | raise | |
|
44 | kill(pid, logfn, tryhard) | |
|
32 | 45 | fp.close() |
|
33 | 46 | if remove: |
|
34 | 47 | os.unlink(pidfile) |
General Comments 0
You need to be logged in to leave comments.
Login now