2024-03-01 01:00:17 -08:00
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
import signal
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
from daemon import pidfile as _pidfile
|
|
|
|
|
|
|
|
|
2024-03-04 17:56:32 -08:00
|
|
|
def pidfile(pidfile_path: Path, sig=signal.SIGQUIT, terminate_if_running: bool = True):
|
2024-03-01 16:02:30 -08:00
|
|
|
pf = _pidfile.TimeoutPIDLockFile(str(pidfile_path.expanduser()), 30)
|
2024-03-01 01:00:17 -08:00
|
|
|
pid = pf.read_pid()
|
|
|
|
if pid and terminate_if_running:
|
|
|
|
try:
|
|
|
|
logging.debug(f"Stopping PID {pid}")
|
2024-03-04 17:56:32 -08:00
|
|
|
os.kill(pid, sig)
|
2024-03-01 01:00:17 -08:00
|
|
|
except ProcessLookupError:
|
|
|
|
logging.debug(f"PID {pid} not running; breaking lock.")
|
|
|
|
pf.break_lock()
|
|
|
|
return pf
|