| #!/usr/bin/python |
| |
| import SimpleHTTPServer |
| import SocketServer |
| import os |
| import sys |
| |
| |
| def check_pid(pid): |
| try: |
| os.kill(pid, 0) |
| except OSError: |
| return False |
| else: |
| return True |
| |
| |
| class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): |
| def do_GET(self): |
| if 'quitquitquit' in self.path: |
| sys.exit(0) |
| return |
| SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) |
| |
| |
| def main(): |
| server = SocketServer.TCPServer(('127.0.0.1', 0), MyHandler) |
| server.timeout = 0.5 |
| ip, port = server.server_address |
| |
| if len(sys.argv) <= 1: |
| print 'Usage: http_server /path/to/control/file' |
| return 1 |
| |
| filename = sys.argv[1] |
| open(filename, 'w').write(str(port)) |
| |
| while True: |
| print 'http_server running...' |
| server.handle_request() |
| if 'quitquitquit' in open(filename).read(): |
| return 0 |
| ppid = os.getppid() |
| if ppid == 1 or not check_pid(ppid): |
| print 'parent process died.' |
| return 2 |
| |
| if __name__ == '__main__': |
| rv = main() |
| print 'http_server exiting with code %d.' % rv |
| exit(rv) |