Mercurial > public > mercurial-scm > hg-stable
view 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 |
line wrap: on
line source
# This python code can be imported into tests in order to terminate a process # with signal.SIGKILL on posix, or a roughly equivalent procedure on Windows. from __future__ import annotations import os import signal import subprocess import sys import tempfile from .. import ( encoding, pycompat, ) from ..utils import procutil def kill_nt(pid: int, exit_code: int): fd, pidfile = tempfile.mkstemp( prefix=b"sigkill-", dir=encoding.environ[b"HGTMP"], text=False ) try: os.write(fd, b'%d\n' % pid) finally: os.close(fd) env = dict(encoding.environ) env[b"DAEMON_EXITCODE"] = b"%d" % exit_code # Simulate the message written to stderr for this process on non-Windows # platforms, for test consistency. print("Killed!", file=sys.stderr) subprocess.run( [ encoding.environ[b"PYTHON"], b"%s/killdaemons.py" % encoding.environ[b'RUNTESTDIR_FORWARD_SLASH'], pidfile, ], env=procutil.tonativeenv(env), ) def kill(pid: int): """Kill the process with the given PID with SIGKILL or equivalent.""" if pycompat.iswindows: exit_code = 128 + 9 kill_nt(pid, exit_code) else: os.kill(pid, signal.SIGKILL)