]> git.llucax.com Git - software/pymin.git/blobdiff - pymin/procman.py
Remove unused ProcessInfo.last_return attribute.
[software/pymin.git] / pymin / procman.py
index 810481d3a2c9c8ada37f2515aae06a8a53190305..cb00f4ff54647ef66b621251ab36238aaba5aafc 100644 (file)
@@ -5,6 +5,9 @@ import errno
 import signal
 import subprocess
 
 import signal
 import subprocess
 
+__ALL__ = ('ProcessManager', 'manager', 'register', 'unregister', 'call',
+           'start', 'stop', 'kill', 'get', 'has', 'sigchild_handler')
+
 class ProcessInfo:
     def __init__(self, name, command, callback=None, persist=False,
                        args=None, kw=None, max_errors=3):
 class ProcessInfo:
     def __init__(self, name, command, callback=None, persist=False,
                        args=None, kw=None, max_errors=3):
@@ -23,7 +26,6 @@ class ProcessInfo:
         self.signal = None
         self.process = None
         self.error_count = 0
         self.signal = None
         self.process = None
         self.error_count = 0
-        self.last_return = None
         self.running = False
     def start(self):
         assert self.process is None
         self.running = False
     def start(self):
         assert self.process is None
@@ -88,16 +90,17 @@ class ProcessManager:
         assert name in self.namemap
         self.namemap[name].kill(name, stop)
 
         assert name in self.namemap
         self.namemap[name].kill(name, stop)
 
-    def sigchild_handler(self, signum):
+    def sigchild_handler(self, signum, stack_frame=None):
         try:
             (pid, status) = os.waitpid(-1, os.WNOHANG)
         except OSError, e:
         try:
             (pid, status) = os.waitpid(-1, os.WNOHANG)
         except OSError, e:
-            if e.errno is e.ECHILD:
+            if e.errno is errno.ECHILD:
                 return
             raise
         while pid:
             if pid in self.pidmap:
                 p = self.pidmap[pid]
                 return
             raise
         while pid:
             if pid in self.pidmap:
                 p = self.pidmap[pid]
+                p.process.returncode = status
                 if p.callback is not None:
                     p.callback(self, p)
                 if p.dont_run or not p.persist or p.error_count >= p.max_errors:
                 if p.callback is not None:
                     p.callback(self, p)
                 if p.dont_run or not p.persist or p.error_count >= p.max_errors:
@@ -119,7 +122,7 @@ class ProcessManager:
                     return
                 raise
 
                     return
                 raise
 
-    def __getitem__(self, name):
+    def get(self, name):
         if isinstance(name, basestring): # is a name
             if name in self.namemap:
                 return self.namemap[name]
         if isinstance(name, basestring): # is a name
             if name in self.namemap:
                 return self.namemap[name]
@@ -130,7 +133,7 @@ class ProcessManager:
                 return self.pidmap[name]
         return KeyError, name
 
                 return self.pidmap[name]
         return KeyError, name
 
-    def __contains__(self, name):
+    def has(self, name):
         if isinstance(name, basestring): # is a name
             if name in self.namemap:
                 return True
         if isinstance(name, basestring): # is a name
             if name in self.namemap:
                 return True
@@ -141,6 +144,24 @@ class ProcessManager:
                 return True
         return False
 
                 return True
         return False
 
+    def __getitem__(self, name):
+        return self.get(name)
+
+    def __contains__(self, name):
+        return self.has(name)
+
+# Globals
+manager = ProcessManager()
+register = manager.register
+unregister = manager.unregister
+call = manager.call
+start = manager.start
+stop = manager.stop
+kill = manager.kill
+get = manager.get
+has = manager.has
+sigchild_handler = manager.sigchild_handler
+
 
 if __name__ == '__main__':
 
 
 if __name__ == '__main__':
 
@@ -150,7 +171,7 @@ if __name__ == '__main__':
     sig = None
     count = 0
 
     sig = None
     count = 0
 
-    def sigchild_handler(signum, stacktrace):
+    def SIGCHLD_handler(signum, stacktrace):
         global sig
         sig = signum
         print 'SIGCHLD', signum
         global sig
         sig = signum
         print 'SIGCHLD', signum
@@ -166,21 +187,19 @@ if __name__ == '__main__':
                 pm.start('test2')
         print 'died:', pi.name, pi.command
 
                 pm.start('test2')
         print 'died:', pi.name, pi.command
 
-    procman = ProcessManager()
-
-    procman.register('test-service', ('sleep', '2'), notify, True)
-    procman.register('test2', ('sleep', '3'), notify, False)
+    register('test-service', ('sleep', '2'), notify, True)
+    register('test2', ('sleep', '3'), notify, False)
 
 
-    signal.signal(signal.SIGCHLD, sigchild_handler)
+    signal.signal(signal.SIGCHLD, SIGCHLD_handler)
 
 
-    procman.call('test', ('sleep', '5'), notify)
-    procman.start('test-service')
+    call('test', ('sleep', '5'), notify)
+    start('test-service')
 
 
-    print "Esperando...", [pi.name for pi in procman.namemap.values()]
-    while procman.pidmap:
+    print "Esperando...", [pi.name for pi in manager.namemap.values()]
+    while manager.pidmap:
         signal.pause()
         if sig == signal.SIGCHLD:
             sig = None
         signal.pause()
         if sig == signal.SIGCHLD:
             sig = None
-            procman.sigchild_handler(sig)
-        print "Esperando...", [pi.name for pi in procman.namemap.values()]
+            sigchild_handler(sig)
+        print "Esperando...", [pi.name for pi in manager.namemap.values()]