annotate mercurial/testing/ps_util.py @ 52971:469b9a628b51

dirstatemap: update, document and type the identity tracking This new form should hopefully be clearer and less error prone.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 18 Feb 2025 22:24:08 +0100
parents d4e30c15626d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52026
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
1 # This python code can be imported into tests in order to terminate a process
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
2 # with signal.SIGKILL on posix, or a roughly equivalent procedure on Windows.
52382
d4e30c15626d typing: add missing `from __future__ import annotations` to core modules
Matt Harbison <matt_harbison@yahoo.com>
parents: 52026
diff changeset
3
d4e30c15626d typing: add missing `from __future__ import annotations` to core modules
Matt Harbison <matt_harbison@yahoo.com>
parents: 52026
diff changeset
4 from __future__ import annotations
d4e30c15626d typing: add missing `from __future__ import annotations` to core modules
Matt Harbison <matt_harbison@yahoo.com>
parents: 52026
diff changeset
5
52026
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
6 import os
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
7 import signal
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
8 import subprocess
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
9 import sys
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
10 import tempfile
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
11
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
12 from .. import (
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
13 encoding,
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
14 pycompat,
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
15 )
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
16
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
17 from ..utils import procutil
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
18
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
19
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
20 def kill_nt(pid: int, exit_code: int):
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
21 fd, pidfile = tempfile.mkstemp(
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
22 prefix=b"sigkill-", dir=encoding.environ[b"HGTMP"], text=False
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
23 )
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
24 try:
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
25 os.write(fd, b'%d\n' % pid)
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
26 finally:
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
27 os.close(fd)
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
28
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
29 env = dict(encoding.environ)
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
30 env[b"DAEMON_EXITCODE"] = b"%d" % exit_code
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
31
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
32 # Simulate the message written to stderr for this process on non-Windows
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
33 # platforms, for test consistency.
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
34 print("Killed!", file=sys.stderr)
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
35
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
36 subprocess.run(
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
37 [
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
38 encoding.environ[b"PYTHON"],
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
39 b"%s/killdaemons.py"
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
40 % encoding.environ[b'RUNTESTDIR_FORWARD_SLASH'],
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
41 pidfile,
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
42 ],
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
43 env=procutil.tonativeenv(env),
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
44 )
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
45
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
46
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
47 def kill(pid: int):
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
48 """Kill the process with the given PID with SIGKILL or equivalent."""
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
49 if pycompat.iswindows:
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
50 exit_code = 128 + 9
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
51 kill_nt(pid, exit_code)
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
52 else:
625cf9621551 tests: add a module that can perform the equivalent of `SIGKILL` on any OS
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
53 os.kill(pid, signal.SIGKILL)