Guest User

CORRECT.py

a guest
Aug 2nd, 2012
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.96 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. """A basic fork in action"""
  4. import Pyro4
  5. import os,sys,atexit,time
  6. from signal import SIGTERM
  7. #sys.argv.insert(1,'qwe')
  8. #print sys.argv
  9. #exit()
  10. pidfile='/tmp/my_own.pid'
  11. def delpid(self):
  12.     os.remove(self.pidfile)
  13. def stop():
  14.     """
  15.    Stop the daemon
  16.    """
  17.     # Get the pid from the pidfile
  18.     try:
  19.         pf = file(pidfile,'r')
  20.         pid = int(pf.read().strip())
  21.         pf.close()
  22.     except IOError:
  23.         pid = None
  24.  
  25.     if not pid:
  26.         message = "pidfile %s does not exist. Daemon not running?\n"
  27.         sys.stderr.write(message % pidfile)
  28.         return # not an error in a restart
  29.  
  30.     # Try killing the daemon process   
  31.     try:
  32.         while 1:
  33.             os.kill(pid, SIGTERM)
  34.             time.sleep(0.1)
  35.     except OSError, err:
  36.         err = str(err)
  37.         if err.find("No such process") > 0:
  38.             if os.path.exists(pidfile):
  39.                 os.remove(pidfile)
  40.         else:
  41.             print str(err)
  42.             sys.exit(1)
  43.            
  44. def start():
  45.     try:
  46.         pf = file(pidfile,'r')
  47.         pid = int(pf.read().strip())
  48.         pf.close()
  49.     except IOError:
  50.         pid = None
  51.  
  52.     if pid:
  53.         message = "pidfile %s already exist. Daemon already running?\n"
  54.         sys.stderr.write(message % pidfile)
  55.         sys.exit(1)
  56.     os.chdir("/")
  57.     os.setsid()
  58.     os.umask(0)
  59.     try:
  60.         pid = os.fork()
  61.         if pid > 0:
  62.             # exit from second parent
  63.             sys.exit(0)
  64.     except OSError, e:
  65.         sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
  66.         sys.exit(1)
  67.     si = file('/dev/null', 'r')
  68.     se = file('/dev/null', 'a+', 0)
  69.     os.dup2(si.fileno(), sys.stdin.fileno())       
  70.     os.dup2(se.fileno(), sys.stderr.fileno())
  71.  
  72.  
  73.     Pyro4.config.HMAC_KEY='topsecret'
  74.     class GreetingMaker(object):
  75.         def get_fortune(self, name):
  76.             return "Hello, {0}. Here is your fortune message:\n" \
  77.                    "Behold the warranty -- the bold print giveth and the fine print taketh away.".format(name)
  78.  
  79.     greeting_maker=GreetingMaker()
  80.     pyro_daemon=Pyro4.Daemon()                 # make a Pyro daemon
  81.     uri=pyro_daemon.register(greeting_maker)   # register the greeting object as a Pyro object
  82.     print "Pyro is ready. Server uri =", uri  
  83.    
  84.     atexit.register(delpid)
  85.     pid = str(os.getpid())
  86.     file(pidfile,'w+').write("%s\n" % pid)
  87.  
  88.     pyro_daemon.requestLoop()
  89.  
  90. def my_fork():
  91.     child_pid = os.fork()
  92.     if child_pid == 0:
  93.         print "Child Process: PID# %s" % os.getpid()
  94.         #si = file('/dev/null', 'r')
  95.         #os.dup2(si.fileno(), sys.stdin.fileno())
  96.         #a=raw_input('123')
  97.         if 'start'==sys.argv[1]:
  98.             start()
  99.         elif 'stop'==sys.argv[1]:
  100.             stop()
  101.         else:
  102.             print 'start|stop'
  103.     else:
  104.         print "Parent Process: PID# %s" % os.getpid()
  105.        
  106. if __name__ == "__main__":
  107.     my_fork()
Advertisement
Add Comment
Please, Sign In to add comment