Mercurial > hg
annotate tests/killdaemons.py @ 36705:c6901665cd5b
py3: make sure __repr__ returns a str
# skip-blame because just r'' prefix
Differential Revision: https://phab.mercurial-scm.org/D2652
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Sun, 04 Mar 2018 22:40:33 +0530 |
parents | ed1f376090cd |
children | 89793289c891 |
rev | line source |
---|---|
7344
58fd3c718ca4
tests: add killdaemons helper script
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
58fd3c718ca4
tests: add killdaemons helper script
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 |
28942
05cb9c6f310e
py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
25473
diff
changeset
|
3 from __future__ import absolute_import |
05cb9c6f310e
py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
25473
diff
changeset
|
4 import errno |
05cb9c6f310e
py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
25473
diff
changeset
|
5 import os |
05cb9c6f310e
py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
25473
diff
changeset
|
6 import signal |
05cb9c6f310e
py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
25473
diff
changeset
|
7 import sys |
05cb9c6f310e
py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
25473
diff
changeset
|
8 import time |
7344
58fd3c718ca4
tests: add killdaemons helper script
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
9 |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
10 if os.name =='nt': |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
11 import ctypes |
20493
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
12 |
32857
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
13 _BOOL = ctypes.c_long |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
14 _DWORD = ctypes.c_ulong |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
15 _UINT = ctypes.c_uint |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
16 _HANDLE = ctypes.c_void_p |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
17 |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
18 ctypes.windll.kernel32.CloseHandle.argtypes = [_HANDLE] |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
19 ctypes.windll.kernel32.CloseHandle.restype = _BOOL |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
20 |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
21 ctypes.windll.kernel32.GetLastError.argtypes = [] |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
22 ctypes.windll.kernel32.GetLastError.restype = _DWORD |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
23 |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
24 ctypes.windll.kernel32.OpenProcess.argtypes = [_DWORD, _BOOL, _DWORD] |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
25 ctypes.windll.kernel32.OpenProcess.restype = _HANDLE |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
26 |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
27 ctypes.windll.kernel32.TerminateProcess.argtypes = [_HANDLE, _UINT] |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
28 ctypes.windll.kernel32.TerminateProcess.restype = _BOOL |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
29 |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
30 ctypes.windll.kernel32.WaitForSingleObject.argtypes = [_HANDLE, _DWORD] |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
31 ctypes.windll.kernel32.WaitForSingleObject.restype = _DWORD |
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
32 |
20493
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
33 def _check(ret, expectederr=None): |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
34 if ret == 0: |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
35 winerrno = ctypes.GetLastError() |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
36 if winerrno == expectederr: |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
37 return True |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
38 raise ctypes.WinError(winerrno) |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
39 |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
40 def kill(pid, logfn, tryhard=True): |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
41 logfn('# Killing daemon process %d' % pid) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
42 PROCESS_TERMINATE = 1 |
20496
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
43 PROCESS_QUERY_INFORMATION = 0x400 |
20698
1147563faf62
killdaemons: drop superfluous L suffix from constant
Augie Fackler <raf@durin42.com>
parents:
20496
diff
changeset
|
44 SYNCHRONIZE = 0x00100000 |
20494
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
45 WAIT_OBJECT_0 = 0 |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
46 WAIT_TIMEOUT = 258 |
32858
ed1f376090cd
killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32857
diff
changeset
|
47 WAIT_FAILED = _DWORD(0xFFFFFFFF).value |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
48 handle = ctypes.windll.kernel32.OpenProcess( |
20496
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
49 PROCESS_TERMINATE|SYNCHRONIZE|PROCESS_QUERY_INFORMATION, |
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
50 False, pid) |
32857
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
51 if handle is None: |
20495
0cf1c8c452d3
tests: killdaemons.py for checks reason when getting no process handle
Simon Heimberg <simohe@besonet.ch>
parents:
20494
diff
changeset
|
52 _check(0, 87) # err 87 when process not found |
20493
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
53 return # process not found, already finished |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
54 try: |
20496
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
55 r = ctypes.windll.kernel32.WaitForSingleObject(handle, 100) |
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
56 if r == WAIT_OBJECT_0: |
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
57 pass # terminated, but process handle still available |
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
58 elif r == WAIT_TIMEOUT: |
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
59 _check(ctypes.windll.kernel32.TerminateProcess(handle, -1)) |
32858
ed1f376090cd
killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32857
diff
changeset
|
60 elif r == WAIT_FAILED: |
ed1f376090cd
killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32857
diff
changeset
|
61 _check(0) # err stored in GetLastError() |
20494
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
62 |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
63 # TODO?: forcefully kill when timeout |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
64 # and ?shorter waiting time? when tryhard==True |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
65 r = ctypes.windll.kernel32.WaitForSingleObject(handle, 100) |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
66 # timeout = 100 ms |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
67 if r == WAIT_OBJECT_0: |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
68 pass # process is terminated |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
69 elif r == WAIT_TIMEOUT: |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
70 logfn('# Daemon process %d is stuck') |
32858
ed1f376090cd
killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32857
diff
changeset
|
71 elif r == WAIT_FAILED: |
ed1f376090cd
killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32857
diff
changeset
|
72 _check(0) # err stored in GetLastError() |
20493
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
73 except: #re-raises |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
74 ctypes.windll.kernel32.CloseHandle(handle) # no _check, keep error |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
75 raise |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
76 _check(ctypes.windll.kernel32.CloseHandle(handle)) |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
77 |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
78 else: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
79 def kill(pid, logfn, tryhard=True): |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
80 try: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
81 os.kill(pid, 0) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
82 logfn('# Killing daemon process %d' % pid) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
83 os.kill(pid, signal.SIGTERM) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
84 if tryhard: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
85 for i in range(10): |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
86 time.sleep(0.05) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
87 os.kill(pid, 0) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
88 else: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
89 time.sleep(0.1) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
90 os.kill(pid, 0) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
91 logfn('# Daemon process %d is stuck - really killing it' % pid) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
92 os.kill(pid, signal.SIGKILL) |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
21194
diff
changeset
|
93 except OSError as err: |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
94 if err.errno != errno.ESRCH: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
95 raise |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
96 |
17464
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
97 def killdaemons(pidfile, tryhard=True, remove=False, logfn=None): |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
98 if not logfn: |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
99 logfn = lambda s: s |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
100 # Kill off any leftover daemon processes |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
101 try: |
32677
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
102 pids = [] |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
103 with open(pidfile) as fp: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
104 for line in fp: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
105 try: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
106 pid = int(line) |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
107 if pid <= 0: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
108 raise ValueError |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
109 except ValueError: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
110 logfn('# Not killing daemon process %s - invalid pid' |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
111 % line.rstrip()) |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
112 continue |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
113 pids.append(pid) |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
114 for pid in pids: |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
115 kill(pid, logfn, tryhard) |
17464
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
116 if remove: |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
117 os.unlink(pidfile) |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
118 except IOError: |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
119 pass |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
120 |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
121 if __name__ == '__main__': |
25473
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
122 if len(sys.argv) > 1: |
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
123 path, = sys.argv[1:] |
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
124 else: |
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
125 path = os.environ["DAEMON_PIDS"] |
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
126 |
17466
d5a3bda6e170
killdaemons: take file argument explicitely
Patrick Mezard <patrick@mezard.eu>
parents:
17465
diff
changeset
|
127 killdaemons(path) |