| 628 | |
| 629 | |
| 630 | def deamon(): |
| 631 | try: |
| 632 | pid = os.fork() |
| 633 | if pid > 0: |
| 634 | sys.exit(0) |
| 635 | except OSError, e: |
| 636 | print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) |
| 637 | sys.exit(1) |
| 638 | |
| 639 | # decouple from parent environment |
| 640 | os.setsid() |
| 641 | os.umask(0) |
| 642 | |
| 643 | # do second fork |
| 644 | try: |
| 645 | pid = os.fork() |
| 646 | if pid > 0: |
| 647 | # exit from second parent, print eventual PID before |
| 648 | print "Daemon PID %d" % pid |
| 649 | sys.exit(0) |
| 650 | except OSError, e: |
| 651 | print >> sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) |
| 652 | sys.exit(1) |
| 653 | |
| 654 | # Iterate through and close some file descriptors. |
| 655 | for fd in range(0, 3): |
| 656 | try: |
| 657 | os.close(fd) |
| 658 | except OSError: # ERROR, fd wasn't open to begin with (ignored) |
| 659 | pass |
| 660 | |
| 661 | os.open(os.devnull, os.O_RDWR) # standard input (0) |
| 662 | os.dup2(0, 1) # standard output (1) |
| 663 | os.dup2(0, 2) |
| 664 | |
| 665 | pyload_core = Core() |
| 666 | pyload_core.start() |
| 667 | |
| 668 | |
| 669 | def main(): |