#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2015 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
from LifeCycleCORBA import LifeCycleCORBA
# shutdown all
orb = CORBA.ORB_init([''], CORBA.ORB_ID)
- lcc = LifeCycleCORBA(orb)
+ lcc = LifeCycleCORBA(orb) # see (1)
+ print "Terminating SALOME on port %s..."%(port)
lcc.shutdownServers()
# give some time to shutdown to complete
time.sleep(1)
pass
except:
pass
+ exit(0) # see (1)
pass
+# (1) If --shutdown-servers option is set to 1, session close procedure is
+# called twice: first explicitely by salome command, second by automatic
+# atexit to handle Ctrl-C. During second call, LCC does not exist anymore and
+# a RuntimeError is raised; we explicitely exit this function with code 0 to
+# prevent parent thread from crashing.
def __killMyPort(port, filedict):
# bug fix: ensure port is an integer
for l in lines:
try:
pidfield = l.split()[0] # pid should be at the first position
+ if verbose(): print 'stop process '+pidfield+' : omniNames'
if sys.platform == "win32":
- import win32pm #@UnresolvedImport
- if verbose(): print 'stop process '+pidfield+' : omniNames'
- win32pm.killpid(int(pidfield),0)
+ from salome_utils import win32killpid
+ win32killpid(int(pidfield))
else:
- if verbose(): print 'stop process '+pidfield+' : omniNames'
os.kill(int(pidfield),signal.SIGKILL)
pass
pass
try:
if sys.platform == "win32":
- import win32pm #@UnresolvedImport @Reimport
- win32pm.killpid(int(pid),0)
+ from salome_utils import win32killpid
+ win32killpid(int(pid))
else:
os.kill(int(pid),signal.SIGKILL)
pass
Parameters:
- port - port number
"""
- print "Terminating SALOME on port %s..."%(port)
-
# bug fix: ensure port is an integer
if port:
port = int(port)
+ try:
+ import PortManager # do not remove! Test for PortManager availability!
+ filedict = getPiDict(port)
+ if not os.path.isfile(filedict): # removed by previous call, see (1)
+ if verbose():
+ print "SALOME on port %s: already removed by previous call"%port
+ # Remove port from PortManager config file
+ try:
+ from PortManager import releasePort
+ if verbose():
+ print "Removing port from PortManager configuration file"
+ releasePort(port)
+ except ImportError:
+ pass
+ return
+ except:
+ pass
+
# try to shutdown session normally
import threading, time
threading.Thread(target=shutdownMyPort, args=(port,False)).start()
dt = 1.0
while 1:
if sys.platform == "win32":
- from win32pm import killpid #@UnresolvedImport
- if killpid(int(pid), 0) != 0:
+ from salome_utils import win32killpid
+ if win32killpid(int(pid)) != 0:
return
else:
from os import kill