6 # -----------------------------------------------------------------------------
8 # Definition des classes d'objets pour le lancement des Server CORBA
12 """Generic class for CORBA server launch"""
18 if self.args.get('xterm'):
19 self.ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-hold']
21 def __init__(self,args):
29 if self.args.get('xterm'):
30 # (Debian) send LD_LIBRARY_PATH to children shells (xterm)
31 env_ld_library_path=['env', 'LD_LIBRARY_PATH='
32 + os.getenv("LD_LIBRARY_PATH")]
33 myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path
34 command = myargs + self.CMD
35 #print "command = ", command
36 if sys.platform == "win32":
38 #cmd_str = "\"" + string.join(command, " ") + "\""
40 #pid = win32pm.spawnpid( cmd_str )
41 pid = win32pm.spawnpid( string.join(command, " "), '-nc' )
42 #pid = win32pm.spawnpid( string.join(command, " ") )
44 #pid = os.spawnvp(os.P_NOWAIT, command[0], command)
45 pid=self.daemonize(command)
46 process_id[pid]=self.CMD
50 def daemonize(self,args):
51 # to daemonize a process need to do the UNIX double-fork magic
52 # see Stevens, "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177)
53 # and UNIX Programming FAQ 1.7 How do I get my program to act like a daemon?
54 # http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
56 c2pread, c2pwrite = os.pipe()
62 #receive real pid from child
63 data=os.read(c2pread,24) #read 24 bytes
64 os.waitpid(pid,0) #remove zombie
66 # return : first parent
70 # decouple from parent environment
74 # do second fork : second child not a session leader
78 #send real pid to parent
79 os.write(c2pwrite,"%d" % pid)
81 # exit from second parent
84 print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
85 os.write(c2pwrite,"-1")
90 os.close(0) #close stdin
91 os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null
93 os.execvp(args[0], args)
95 print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror)