PHP 7.4.33
Preview: pidproxy.py Size: 1.83 KB
/lib/python3.6/site-packages/supervisor/pidproxy.py


""" An executable which proxies for a subprocess; upon a signal, it sends that
signal to the process identified by a pidfile. """

import os
import sys
import signal
import time

class PidProxy:
    pid = None
    def __init__(self, args):
        self.setsignals()
        try:
            self.pidfile, cmdargs = args[1], args[2:]
            self.command = os.path.abspath(cmdargs[0])
            self.cmdargs = cmdargs
        except (ValueError, IndexError):
            self.usage()
            sys.exit(1)

    def go(self):
        self.pid = os.spawnv(os.P_NOWAIT, self.command, self.cmdargs)
        while 1:
            time.sleep(5)
            try:
                pid = os.waitpid(-1, os.WNOHANG)[0]
            except OSError:
                pid = 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):
        try:
            with open(self.pidfile, 'r') as f:
                pid = int(f.read().strip())
        except:
            print("Can't read child pidfile %s!" % self.pidfile)
            return
        os.kill(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()



Directory Contents

Dirs: 6 × Files: 23

Name Size Perms Modified Actions
medusa DIR
- drwxr-xr-x 2025-07-07 09:19:58
Edit Download
scripts DIR
- drwxr-xr-x 2025-07-07 09:19:58
Edit Download
skel DIR
- drwxr-xr-x 2025-07-07 09:19:58
Edit Download
tests DIR
- drwxr-xr-x 2025-07-07 09:19:58
Edit Download
ui DIR
- drwxr-xr-x 2025-07-07 09:19:58
Edit Download
- drwxr-xr-x 2025-07-07 09:19:58
Edit Download
2.50 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
3.66 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
205 B lrw-r--r-- 2021-07-17 23:46:38
Edit Download
13.13 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
18.92 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
7.07 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
30.86 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
6.87 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
13.00 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
86.49 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
1.83 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
6.55 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
38.26 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
36.76 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
3.02 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
1.75 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
53.38 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
14.15 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
45.98 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
6 B lrw-r--r-- 2021-07-17 23:46:38
Edit Download
23.71 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
21.03 KB lrw-r--r-- 2021-07-17 23:46:38
Edit Download
20 B lrw-r--r-- 2021-07-17 23:46:38
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).