Jarkko Laiho <jarkko.la...@iki.fi> wrote: > So ultimately the question is: how should the forking code in the > recipe be modified, so that it satisfies the requirements of OS X? > What does an actual, concrete exec() call look like in this case, and > at what point in the code should it occur?
I don't know -- you didn't post your entire program. Read the Wikipedia page and follow the refs. Here's an example: def daemon (): try: pid = os.fork() if pid > 0: sys.exit(0) # parent except OSError, e: msg = "fork #1 failed: (%d) %s\n" % (e.errno, e.strerror) sys.stderr.write(msg) sys.exit(1) os.umask(0) # now create a new session os.setsid() # and fork into the new session try: pid = os.fork() if pid > 0: sys.exit(0) # session leader exits here except OSError, e: msg = "fork #2 failed: (%d) %s\n" % (e.errno, e.strerror) sys.stderr.write(msg) sys.exit(1) # here you could make any changes you need to the "env", like setting "PYTHONPATH" env = os.environ.copy() # figure out how to invoke the actual program args = [sys.executable, "-c", "import mycode;" + "mycode.realmain()" ] os.execve(sys.executable, args, env) def realmain(): start_server() # the real "main"... # this is basically just an event-handling loop while True: try: asyncore.loop() except (KeyboardInterrupt, SystemExit), x: note(4, "Exited from main loop due to exception:\n%s", ''.join(traceback.format_exception(*sys.exc_info()))) raise except: note(0, "Exited from main loop due to exception:\n%s", ''.join(traceback.format_exception(*sys.exc_info()))) if __name__ == "__main__" and (not sys.platform.lower().startswith("win")): daemon() _______________________________________________ Pythonmac-SIG maillist - Pythonmac-SIG@python.org http://mail.python.org/mailman/listinfo/pythonmac-sig