tests/killdaemons.py
author Gregory Szorc <gregory.szorc@gmail.com>
Mon, 21 Feb 2022 11:08:53 -0700
changeset 48921 c9774f5fa729
parent 48875 6000f5b25c9b
child 49309 d54b213c4380
permissions -rwxr-xr-x
debugcommands: remove pycompat.iteritems() Differential Revision: https://phab.mercurial-scm.org/D12326
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
import errno
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     4
import os
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     5
import signal
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     6
import sys
05cb9c6f310e py3: use absolute_import in killdaemons.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25473
diff changeset
     7
import time
7344
58fd3c718ca4 tests: add killdaemons helper script
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     8
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
     9
if os.name == 'nt':
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    10
    import ctypes
20493
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    11
32857
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    12
    _BOOL = ctypes.c_long
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    13
    _DWORD = ctypes.c_ulong
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    14
    _UINT = ctypes.c_uint
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    15
    _HANDLE = ctypes.c_void_p
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    16
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    17
    ctypes.windll.kernel32.CloseHandle.argtypes = [_HANDLE]
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    18
    ctypes.windll.kernel32.CloseHandle.restype = _BOOL
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    19
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    20
    ctypes.windll.kernel32.GetLastError.argtypes = []
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    21
    ctypes.windll.kernel32.GetLastError.restype = _DWORD
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    22
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    23
    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
    24
    ctypes.windll.kernel32.OpenProcess.restype = _HANDLE
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    25
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    26
    ctypes.windll.kernel32.TerminateProcess.argtypes = [_HANDLE, _UINT]
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    27
    ctypes.windll.kernel32.TerminateProcess.restype = _BOOL
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    28
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    29
    ctypes.windll.kernel32.WaitForSingleObject.argtypes = [_HANDLE, _DWORD]
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    30
    ctypes.windll.kernel32.WaitForSingleObject.restype = _DWORD
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    31
20493
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    32
    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
    33
        if ret == 0:
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    34
            winerrno = ctypes.GetLastError()
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    35
            if winerrno == expectederr:
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    36
                return True
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    37
            raise ctypes.WinError(winerrno)
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    38
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    39
    def kill(pid, logfn, tryhard=True):
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    40
        logfn('# Killing daemon process %d' % pid)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    41
        PROCESS_TERMINATE = 1
20496
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    42
        PROCESS_QUERY_INFORMATION = 0x400
20698
1147563faf62 killdaemons: drop superfluous L suffix from constant
Augie Fackler <raf@durin42.com>
parents: 20496
diff changeset
    43
        SYNCHRONIZE = 0x00100000
20494
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    44
        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
    45
        WAIT_TIMEOUT = 258
32858
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    46
        WAIT_FAILED = _DWORD(0xFFFFFFFF).value
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    47
        handle = ctypes.windll.kernel32.OpenProcess(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    48
            PROCESS_TERMINATE | SYNCHRONIZE | PROCESS_QUERY_INFORMATION,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    49
            False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    50
            pid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    51
        )
32857
d644e859d9da killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com>
parents: 32677
diff changeset
    52
        if handle is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    53
            _check(0, 87)  # err 87 when process not found
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    54
            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
    55
        try:
20496
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    56
            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
    57
            if r == WAIT_OBJECT_0:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    58
                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
    59
            elif r == WAIT_TIMEOUT:
acbd19b9fbe1 tests: killdaemons.py for windows distinguishes access violation and terminated
Simon Heimberg <simohe@besonet.ch>
parents: 20495
diff changeset
    60
                _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
    61
            elif r == WAIT_FAILED:
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    62
                _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
    63
ea3adeac5248 tests: killdaemons.py for windows waits for killed process to terminate
Simon Heimberg <simohe@besonet.ch>
parents: 20493
diff changeset
    64
            # 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
    65
            #        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
    66
            r = ctypes.windll.kernel32.WaitForSingleObject(handle, 100)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    67
            # 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
    68
            if r == WAIT_OBJECT_0:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    69
                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
    70
            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
    71
                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
    72
            elif r == WAIT_FAILED:
ed1f376090cd killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32857
diff changeset
    73
                _check(0)  # err stored in GetLastError()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    74
        except:  # re-raises
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    75
            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
    76
            raise
b5f43dbf64ca tests: kill for windows in killdaemons.py checks return values
Simon Heimberg <simohe@besonet.ch>
parents: 17466
diff changeset
    77
        _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
    78
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    79
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    80
else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
    81
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    82
    def kill(pid, logfn, tryhard=True):
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    83
        try:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    84
            os.kill(pid, 0)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    85
            logfn('# Killing daemon process %d' % pid)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    86
            os.kill(pid, signal.SIGTERM)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    87
            if tryhard:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    88
                for i in range(10):
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    89
                    time.sleep(0.05)
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
            else:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    92
                time.sleep(0.1)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    93
                os.kill(pid, 0)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    94
            logfn('# Daemon process %d is stuck - really killing it' % pid)
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    95
            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
    96
        except OSError as err:
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    97
            if err.errno != errno.ESRCH:
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    98
                raise
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
    99
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   100
17464
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   101
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
   102
    if not logfn:
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   103
        logfn = lambda s: s
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   104
    # Kill off any leftover daemon processes
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   105
    try:
32677
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   106
        pids = []
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   107
        with open(pidfile) as fp:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   108
            for line in fp:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   109
                try:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   110
                    pid = int(line)
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   111
                    if pid <= 0:
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   112
                        raise ValueError
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   113
                except ValueError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   114
                    logfn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   115
                        '# Not killing daemon process %s - invalid pid'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   116
                        % line.rstrip()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   117
                    )
32677
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   118
                    continue
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   119
                pids.append(pid)
f840b2621cce killdaemons: close pid file before killing processes
Matt Harbison <matt_harbison@yahoo.com>
parents: 29811
diff changeset
   120
        for pid in pids:
17465
2d4a096e213c killdaemons: add windows implementation
Patrick Mezard <patrick@mezard.eu>
parents: 17464
diff changeset
   121
            kill(pid, logfn, tryhard)
17464
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   122
        if remove:
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   123
            os.unlink(pidfile)
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   124
    except IOError:
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   125
        pass
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   126
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   127
17464
eddfb9a550d0 run-tests: do not duplicate killdaemons() code
Patrick Mezard <patrick@mezard.eu>
parents: 10905
diff changeset
   128
if __name__ == '__main__':
25473
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   129
    if len(sys.argv) > 1:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37846
diff changeset
   130
        (path,) = sys.argv[1:]
25473
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   131
    else:
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   132
        path = os.environ["DAEMON_PIDS"]
123c99034cb6 tests: make killdaemons.py use DAEMON_PIDS by default
Matt Mackall <mpm@selenic.com>
parents: 25031
diff changeset
   133
37846
89793289c891 tests: remove pid file by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32858
diff changeset
   134
    killdaemons(path, remove=True)