Mercurial > public > mercurial-scm > hg-stable
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 |
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) |