X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=bin%2Fserver.py;h=3fde06b40c362b49397f0d9c5ae5cf8306b3e041;hb=b519d7c2dabf7606624de681a572331b50299ff1;hp=98b2ef95b5e6c76b056419cecb6c7fd96f01eb55;hpb=f14439749926cca959747bb79fda10529520bd0b;p=modules%2Fkernel.git diff --git a/bin/server.py b/bin/server.py index 98b2ef95b..3fde06b40 100755 --- a/bin/server.py +++ b/bin/server.py @@ -1,6 +1,29 @@ #!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# import os, sys, string +from salome_utils import getHostName process_id = {} # ----------------------------------------------------------------------------- @@ -10,27 +33,40 @@ process_id = {} class Server: """Generic class for CORBA server launch""" + + server_launch_args = [] def initArgs(self): self.PID=None self.CMD=[] self.ARGS=[] if self.args.get('xterm'): + if sys.platform != "win32": self.ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-hold'] + else: + self.ARGS=['cmd', '/c', 'start cmd.exe', '/K'] def __init__(self,args): self.args=args self.initArgs() + @staticmethod + def set_server_launch_cmd(cmd): + if cmd == "srun": + Server.server_launch_args = ["srun", "-n", "1", "-N", "1"] + Server.server_launch_args += ["--share", "--nodelist=%s" % getHostName()] + else: + print >>sys.stderr, "Unknown server launch command:%s" % cmd def run(self): global process_id myargs=self.ARGS if self.args.get('xterm'): # (Debian) send LD_LIBRARY_PATH to children shells (xterm) - env_ld_library_path=['env', 'LD_LIBRARY_PATH=' - + os.getenv("LD_LIBRARY_PATH")] - myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path + if sys.platform != "win32": + env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + + os.getenv("LD_LIBRARY_PATH")] + myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path command = myargs + self.CMD #print "command = ", command if sys.platform == "win32": @@ -43,7 +79,9 @@ class Server: else: #pid = os.spawnvp(os.P_NOWAIT, command[0], command) pid=self.daemonize(command) - process_id[pid]=self.CMD + if pid is not None: + #store process pid if it really exists + process_id[pid]=self.CMD self.PID = pid return pid @@ -64,7 +102,14 @@ class Server: os.waitpid(pid,0) #remove zombie os.close(c2pread) # return : first parent - return int(data) + childpid=int(data) + if childpid==-1: + return None + try: + os.kill(childpid,0) + return childpid + except: + return None #first child # decouple from parent environment @@ -89,8 +134,11 @@ class Server: #I am a daemon os.close(0) #close stdin os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null + all_args = Server.server_launch_args + args try: - os.execvp(args[0], args) + os.execvp(all_args[0], all_args) except OSError, e: - print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror) + if args[0] != "notifd": + print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror) + pass os._exit(127)