Remove the pidproxy.py file.
This commit is contained in:
@@ -1,80 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""An executable which proxies for a subprocess; upon a signal, it sends that
|
|
||||||
signal to the process identified by a pidfile.
|
|
||||||
|
|
||||||
This is a modified version of the pidproxy.py from supervisor's repository,
|
|
||||||
which can be found at:
|
|
||||||
|
|
||||||
https://github.com/Supervisor/supervisor/blob/master/supervisor/pidproxy.py
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import signal
|
|
||||||
import time
|
|
||||||
from subprocess import run
|
|
||||||
|
|
||||||
|
|
||||||
# The sleep time before the watcher checks if the mailman process is still
|
|
||||||
# living.
|
|
||||||
SLEEP_TIME = 5
|
|
||||||
|
|
||||||
|
|
||||||
class PidProxy:
|
|
||||||
pid = None
|
|
||||||
|
|
||||||
def __init__(self, args):
|
|
||||||
self.setsignals()
|
|
||||||
try:
|
|
||||||
self.pidfile, cmdargs = args[1], args[2:]
|
|
||||||
self.pidfile = os.path.abspath(self.pidfile)
|
|
||||||
self.args = cmdargs
|
|
||||||
except (ValueError, IndexError):
|
|
||||||
self.usage()
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def go(self):
|
|
||||||
run(self.args)
|
|
||||||
time.sleep(2)
|
|
||||||
with open(self.pidfile, 'r') as f:
|
|
||||||
self.pid = int(f.read().strip())
|
|
||||||
while 1:
|
|
||||||
time.sleep(SLEEP_TIME)
|
|
||||||
try:
|
|
||||||
pid, sts = os.waitpid(-2, os.WNOHANG)
|
|
||||||
except OSError:
|
|
||||||
pid, sts = None, None
|
|
||||||
if pid:
|
|
||||||
break
|
|
||||||
|
|
||||||
def usage(self):
|
|
||||||
print("pidproxy.py <pidfile name> <command> [<cmdarg1> ...]")
|
|
||||||
|
|
||||||
def setsignals(self):
|
|
||||||
signal.signal(signal.SIGTERM, self.passtochild)
|
|
||||||
signal.signal(signal.SIGHUP, self.passtochild)
|
|
||||||
signal.signal(signal.SIGINT, self.passtochild)
|
|
||||||
signal.signal(signal.SIGUSR1, self.passtochild)
|
|
||||||
signal.signal(signal.SIGUSR2, self.passtochild)
|
|
||||||
signal.signal(signal.SIGQUIT, self.passtochild)
|
|
||||||
signal.signal(signal.SIGCHLD, self.reap)
|
|
||||||
|
|
||||||
def reap(self, sig, frame):
|
|
||||||
# do nothing, we reap our child synchronously
|
|
||||||
pass
|
|
||||||
|
|
||||||
def passtochild(self, sig, frame):
|
|
||||||
if self.pid is None:
|
|
||||||
sys.exit(1)
|
|
||||||
os.kill(self.pid, sig)
|
|
||||||
if sig in [signal.SIGTERM, signal.SIGINT, signal.SIGQUIT]:
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
pp = PidProxy(sys.argv)
|
|
||||||
pp.go()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
Reference in New Issue
Block a user