#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
+# 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
+# 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 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.
+# 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
+# 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
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
## \file killSalomeWithPort.py
import Utils_Identity
import salome_utils
-def getPiDict(port,appname='salome',full=True,hidden=True):
+def getPiDict(port,appname='salome',full=True,hidden=True,hostname=None):
"""
Get file with list of SALOME processes.
This file is located in the user's home directory
"""
from salome_utils import generateFileName, getTmpDir
dir = ""
+ if not hostname:
+ hostname = os.getenv("NSHOST")
+ if hostname: hostname = hostname.split(".")[0]
+ pass
if full:
# full path to the pidict file is requested
if hidden:
suffix="pidict",
hidden=hidden,
with_username=True,
- with_hostname=True,
+ with_hostname=hostname or True,
with_port=port,
with_app=appname.upper())
os.remove(omniorb_config)
pass
+ if os.path.lexists(last_running_config):return
+
#try to relink last.cfg to an existing config file if any
files = glob.glob(os.path.join(os.environ["HOME"],Utils_Identity.getapplipath(),
"USERS",".omniORB_"+salome_utils.getUserName()+"_*.cfg"))
Parameters:
- port - port number
"""
+ from salome_utils import getShortHostName, getHostName
# new-style dot-prefixed pidict file
filedict = getPiDict(port, hidden=True)
# provide compatibility with old-style pidict file (not dot-prefixed)
if not os.path.exists(filedict): filedict = getPiDict(port, hidden=False)
+ # provide compatibility with old-style pidict file (short hostname)
+ if not os.path.exists(filedict): filedict = getPiDict(port, hidden=True, hostname=getShortHostName())
+ # provide compatibility with old-style pidict file (not dot-prefixed, short hostname)
+ if not os.path.exists(filedict): filedict = getPiDict(port, hidden=False, hostname=getShortHostName())
+ # provide compatibility with old-style pidict file (long hostname)
+ if not os.path.exists(filedict): filedict = getPiDict(port, hidden=True, hostname=getHostName())
+ # provide compatibility with old-style pidict file (not dot-prefixed, long hostname)
+ if not os.path.exists(filedict): filedict = getPiDict(port, hidden=False, hostname=getHostName())
#
try:
fpid = open(filedict, 'r')
#
from salome_utils import generateFileName
- if sys.platform == "win32":
+ if sys.platform == "win32":
username = os.getenv( "USERNAME" )
- else:
+ else:
username = os.getenv('USER')
path = os.path.join('/tmp/logs', username)
fpidomniNames = generateFileName(path,
try:
if sys.platform == "win32":
import win32pm
- win32pm.killpid(int(pid),0)
+ win32pm.killpid(int(pid),0)
else:
os.kill(int(pid),signal.SIGKILL)
pass
pass
appliCleanOmniOrbConfig(port)
-
+
+def killMyPortSpy(pid, port):
+ dt = 1.0
+ while 1:
+ if sys.platform == "win32":
+ from win32pm import killpid
+ if killpid(int(pid), 0) != 0:
+ return
+ else:
+ from os import kill
+ try:
+ kill(int(pid), 0)
+ except OSError, e:
+ if e.errno != 3:
+ return
+ break
+ pass
+ from time import sleep
+ sleep(dt)
+ pass
+ filedict = getPiDict(port, hidden=True)
+ if not os.path.exists(filedict):
+ return
+ try:
+ import omniORB
+ orb = omniORB.CORBA.ORB_init(sys.argv, omniORB.CORBA.ORB_ID)
+ import SALOME_NamingServicePy
+ ns = SALOME_NamingServicePy.SALOME_NamingServicePy_i(orb)
+ import SALOME
+ session = ns.Resolve("/Kernel/Session")
+ assert session
+ except:
+ return
+ try:
+ status = session.GetStatSession()
+ except:
+ # -- session is in naming service but has crash
+ status = None
+ pass
+ if status:
+ if not status.activeGUI:
+ return
+ pass
+ killMyPort(port)
+ return
+
if __name__ == "__main__":
+ if sys.argv[1] == "--spy":
+ pid = sys.argv[2]
+ port = sys.argv[3]
+ killMyPortSpy(pid, port)
+ sys.exit(0)
+ pass
for port in sys.argv[1:]:
killMyPort(port)
pass