in dcrpm/pidutil.py [0:0]
def send_signal(proc, sig, timeout=DEFAULT_TIMEOUT):
# type: (psutil.Process, enum.IntEnum, int) -> bool
"""
Sends signal `sig` to process `proc`, waiting on each and handles timeouts
as well as nonexistent pids. Returns whether pid was successfully sent
signal.
"""
# Don't accidentally signal core system processes.
pid = proc.pid
if pid < MIN_PID:
logger.warning("Refusing to kill pid %d", pid)
return False
signame = str(sig).split(".")[-1]
logger.info("Sending signal %s to pid %d", signame, pid)
try:
proc.send_signal(sig)
proc.wait(timeout=timeout)
except psutil.NoSuchProcess:
logger.debug("Pid %d does not exist", pid)
return False
except psutil.TimeoutExpired:
logger.debug("Timed out after %ds waiting for %d", timeout, pid)
return False
return True