/usr/lib/salome/bin/server.py is in salome-kernel 6.5.0-7ubuntu2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
# Copyright (C) 2007-2012 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 = {}
# -----------------------------------------------------------------------------
#
# Definition des classes d'objets pour le lancement des Server CORBA
#
class Server:
"""Generic class for CORBA server launch"""
server_launch_mode = "daemon"
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_mode(mode):
if mode == "daemon" or mode == "fork":
Server.server_launch_mode = mode
else:
raise Exception("Unsupported server launch mode: %s" % mode)
def run(self):
global process_id
myargs=self.ARGS
if self.args.get('xterm'):
# (Debian) send LD_LIBRARY_PATH to children shells (xterm)
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":
import win32pm
#cmd_str = "\"" + string.join(command, " ") + "\""
#print cmd_str
#pid = win32pm.spawnpid( cmd_str )
pid = win32pm.spawnpid( string.join(command, " "), '-nc' )
#pid = win32pm.spawnpid( string.join(command, " ") )
elif Server.server_launch_mode == "fork":
pid = os.spawnvp(os.P_NOWAIT, command[0], command)
else: # Server launch mode is daemon
pid=self.daemonize(command)
if pid is not None:
#store process pid if it really exists
process_id[pid]=self.CMD
self.PID = pid
return pid
def daemonize(self,args):
# to daemonize a process need to do the UNIX double-fork magic
# see Stevens, "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177)
# and UNIX Programming FAQ 1.7 How do I get my program to act like a daemon?
# http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
#open a pipe
c2pread, c2pwrite = os.pipe()
#do first fork
pid=os.fork()
if pid > 0:
#first parent
os.close(c2pwrite)
#receive real pid from child
data=os.read(c2pread,24) #read 24 bytes
os.waitpid(pid,0) #remove zombie
os.close(c2pread)
# return : first parent
childpid=int(data)
if childpid==-1:
return None
try:
os.kill(childpid,0)
return childpid
except:
return None
#first child
# decouple from parent environment
os.setsid()
os.close(c2pread)
# do second fork : second child not a session leader
try:
pid = os.fork()
if pid > 0:
#send real pid to parent
os.write(c2pwrite,"%d" % pid)
os.close(c2pwrite)
# exit from second parent
os._exit(0)
except OSError, e:
print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
os.write(c2pwrite,"-1")
os.close(c2pwrite)
sys.exit(1)
#I am a daemon
os.close(0) #close stdin
os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null
try:
os.execvp(args[0], args)
except OSError, e:
if args[0] != "notifd":
print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror)
pass
os._exit(127)
|