Mercurial > hg
annotate tests/killdaemons.py @ 48707:48aff31e7f4c
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12110
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 28 Jan 2022 14:25:51 +0100 |
parents | c102b704edb5 |
children | 6000f5b25c9b |
rev | line source |
---|---|
45830
c102b704edb5
global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
1 #!/usr/bin/env python3 |
7344
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 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
10 if os.name == 'nt': |
17465
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( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
49 PROCESS_TERMINATE | SYNCHRONIZE | PROCESS_QUERY_INFORMATION, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
50 False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
51 pid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
52 ) |
32857
d644e859d9da
killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents:
32677
diff
changeset
|
53 if handle is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
54 _check(0, 87) # err 87 when process not found |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
55 return # process not found, already finished |
20493
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
56 try: |
20496
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
57 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
|
58 if r == WAIT_OBJECT_0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
59 pass # terminated, but process handle still available |
20496
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
60 elif r == WAIT_TIMEOUT: |
acbd19b9fbe1
tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents:
20495
diff
changeset
|
61 _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
|
62 elif r == WAIT_FAILED: |
ed1f376090cd
killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32857
diff
changeset
|
63 _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
|
64 |
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
65 # 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
|
66 # 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
|
67 r = ctypes.windll.kernel32.WaitForSingleObject(handle, 100) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
68 # timeout = 100 ms |
20494
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
69 if r == WAIT_OBJECT_0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
70 pass # process is terminated |
20494
ea3adeac5248
tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents:
20493
diff
changeset
|
71 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
|
72 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
|
73 elif r == WAIT_FAILED: |
ed1f376090cd
killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32857
diff
changeset
|
74 _check(0) # err stored in GetLastError() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
75 except: # re-raises |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
76 ctypes.windll.kernel32.CloseHandle(handle) # no _check, keep error |
20493
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
77 raise |
b5f43dbf64ca
tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents:
17466
diff
changeset
|
78 _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
|
79 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
80 |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
81 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
82 |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
83 def kill(pid, logfn, tryhard=True): |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
84 try: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
85 os.kill(pid, 0) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
86 logfn('# Killing daemon process %d' % pid) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
87 os.kill(pid, signal.SIGTERM) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
88 if tryhard: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
89 for i in range(10): |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
90 time.sleep(0.05) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
91 os.kill(pid, 0) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
92 else: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
93 time.sleep(0.1) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
94 os.kill(pid, 0) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
95 logfn('# Daemon process %d is stuck - really killing it' % pid) |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
96 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
|
97 except OSError as err: |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
98 if err.errno != errno.ESRCH: |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
99 raise |
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
100 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
101 |
17464
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
102 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
|
103 if not logfn: |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
104 logfn = lambda s: s |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
105 # Kill off any leftover daemon processes |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
106 try: |
32677
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
107 pids = [] |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
108 with open(pidfile) as fp: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
109 for line in fp: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
110 try: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
111 pid = int(line) |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
112 if pid <= 0: |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
113 raise ValueError |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
114 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
115 logfn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
116 '# Not killing daemon process %s - invalid pid' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
117 % line.rstrip() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
118 ) |
32677
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
119 continue |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
120 pids.append(pid) |
f840b2621cce
killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents:
29811
diff
changeset
|
121 for pid in pids: |
17465
2d4a096e213c
killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents:
17464
diff
changeset
|
122 kill(pid, logfn, tryhard) |
17464
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
123 if remove: |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
124 os.unlink(pidfile) |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
125 except IOError: |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
126 pass |
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
127 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
128 |
17464
eddfb9a550d0
run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents:
10905
diff
changeset
|
129 if __name__ == '__main__': |
25473
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
130 if len(sys.argv) > 1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37846
diff
changeset
|
131 (path,) = sys.argv[1:] |
25473
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
132 else: |
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
133 path = os.environ["DAEMON_PIDS"] |
123c99034cb6
tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents:
25031
diff
changeset
|
134 |
37846
89793289c891
tests: remove pid file by default
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32858
diff
changeset
|
135 killdaemons(path, remove=True) |