X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=bin%2FkillSalomeWithPort.py;h=fec9e4aa356850f7a1794f4bc39e881283a9febf;hb=ee44cdc8da140e8f0aabaa1b9d9485939899cfdf;hp=95497f0dbefe80091c4591fdd648211e5516122e;hpb=eb8bb67cf17a6cd12ef957ab2f60b98258af2279;p=modules%2Fkernel.git diff --git a/bin/killSalomeWithPort.py b/bin/killSalomeWithPort.py index 95497f0db..fec9e4aa3 100755 --- a/bin/killSalomeWithPort.py +++ b/bin/killSalomeWithPort.py @@ -1,6 +1,6 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2017 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 @@ -31,7 +31,7 @@ # \endcode # -import os, sys, pickle, signal, commands,glob +import os, sys, pickle, signal, subprocess,glob import subprocess import shlex from salome_utils import verbose @@ -96,7 +96,7 @@ def appliCleanOmniOrbConfig(port): the last is removed only if the link points to the first file. """ if verbose(): - print "clean OmniOrb config for port %s"%port + print("clean OmniOrb config for port %s"%port) from salome_utils import generateFileName, getUserName omniorbUserPath = os.getenv("OMNIORB_USER_PATH") @@ -202,7 +202,7 @@ def shutdownMyPort(port, cleanup=True): # shutdown all orb = CORBA.ORB_init([''], CORBA.ORB_ID) lcc = LifeCycleCORBA(orb) # see (1) - print "Terminating SALOME on port %s..."%(port) + print("Terminating SALOME on port %s..."%(port)) lcc.shutdownServers() # give some time to shutdown to complete time.sleep(1) @@ -214,12 +214,12 @@ def shutdownMyPort(port, cleanup=True): pass except: pass - exit(0) # see (1) + sys.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 +# called twice: first explicitly 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 +# a RuntimeError is raised; we explicitly exit this function with code 0 to # prevent parent thread from crashing. def __killMyPort(port, filedict): @@ -228,103 +228,25 @@ def __killMyPort(port, filedict): port = int(port) try: - with open(filedict, 'r') as fpid: - # - from salome_utils import generateFileName, getLogDir - fpidomniNames = generateFileName(getLogDir(), - prefix="", - suffix="Pid_omniNames", - extension="log", - with_port=port) - if not sys.platform == 'win32': - cmd = 'pid=$(ps -eo pid,command | egrep "[0-9] omniNames -start {0}") ; echo $pid > {1}'.format(port, fpidomniNames ) - subprocess.call(cmd, shell=True) - pass - try: - with open(fpidomniNames) as fpidomniNamesFile: - lines = fpidomniNamesFile.readlines() - - os.remove(fpidomniNames) - for l in lines: + with open(filedict, 'rb') as fpid: + process_ids=pickle.load(fpid) + for process_id in process_ids: + for pid, cmd in list(process_id.items()): + if verbose(): print("stop process %s : %s"% (pid, cmd[0])) try: - pidfield = l.split()[0] # pid should be at the first position - if verbose(): print 'stop process '+pidfield+' : omniNames' - if sys.platform == "win32": - from salome_utils import win32killpid - win32killpid(int(pidfield)) - else: - os.kill(int(pidfield),signal.SIGKILL) - pass - pass + from salome_utils import killpid + killpid(int(pid)) except: + if verbose(): print(" ------------------ process %s : %s not found"% (pid, cmd[0])) pass - pass - pass - except: - pass - # - try: - process_ids=pickle.load(fpid) - for process_id in process_ids: - for pid, cmd in process_id.items(): - if verbose(): print "stop process %s : %s"% (pid, cmd[0]) - if cmd[0] == "omniNames": - if not sys.platform == 'win32': - proc1 = subprocess.Popen(shlex.split('ps -eo pid,command'),stdout=subprocess.PIPE) - proc2 = subprocess.Popen(shlex.split('egrep "[0-9] omniNames -start"'),stdin=proc1.stdout, stdout=subprocess.PIPE,stderr=subprocess.PIPE) - proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits. - out,_ = proc2.communicate() - # out looks like: PID omniNames -start PORT - - # extract omninames pid and port number - try: - import re - omniNamesPid, omniNamesPort = re.search('(.+?) omniNames -start (.+?) ', out).group(1, 2) - if omniNamesPort == port: - if verbose(): - print "stop omniNames [pid=%s] on port %s"%(omniNamesPid, omniNamesPort) - appliCleanOmniOrbConfig(omniNamesPort) - from PortManager import releasePort - releasePort(omniNamesPort) - os.kill(int(omniNamesPid),signal.SIGKILL) - except (ImportError, AttributeError, OSError): - pass - except: - import traceback - traceback.print_exc() - - try: - if sys.platform == "win32": - from salome_utils import win32killpid - win32killpid(int(pid)) - else: - os.kill(int(pid),signal.SIGKILL) - pass - pass - except: - if verbose(): print " ------------------ process %s : %s not found"% (pid, cmd[0]) - pass - pass # for pid, cmd ... - pass # for process_id ... - pass # try... - except: - pass - # end with - # - os.remove(filedict) - cmd='ps -eo pid,command | egrep "[0-9] omniNames -start '+str(port)+'" | sed -e "s%[^0-9]*\([0-9]*\) .*%\\1%g"' -# pid = subprocess.check_output(shlex.split(cmd)) - pid = commands.getoutput(cmd) - a = "" - while pid and len(a.split()) < 2: - a = commands.getoutput("kill -9 " + pid) - pid = commands.getoutput(cmd) - pass - pass + pass # for pid ... + pass # for process_id ... + # end with except: - print "Cannot find or open SALOME PIDs file for port", port + print("Cannot find or open SALOME PIDs file for port", port) pass - # + os.remove(filedict) + pass # def __guessPiDictFilename(port): @@ -354,7 +276,7 @@ def __guessPiDictFilename(port): log_msg += " ... not found\n" if verbose(): - print log_msg + print(log_msg) return filedict # @@ -374,12 +296,12 @@ def killMyPort(port): 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 + 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" + print("Removing port from PortManager configuration file") releasePort(port) except ImportError: pass @@ -389,7 +311,7 @@ def killMyPort(port): # try to shutdown session normally import threading, time - threading.Thread(target=shutdownMyPort, args=(port,False)).start() + threading.Thread(target=shutdownMyPort, args=(port,True)).start() time.sleep(3) # wait a little, then kill processes (should be done if shutdown procedure hangs up) try: @@ -427,23 +349,17 @@ def cleanApplication(port): pass appliCleanOmniOrbConfig(port) + pass def killMyPortSpy(pid, port): dt = 1.0 while 1: - if sys.platform == "win32": - from salome_utils import win32killpid - if win32killpid(int(pid)) != 0: - return - else: - from os import kill - try: - kill(int(pid), 0) - except OSError, e: - if e.errno != 3: - return - break - pass + from salome_utils import killpid + ret = killpid(int(pid), 0) + if ret == 0: + break + elif ret < 0: + return from time import sleep sleep(dt) pass @@ -475,10 +391,10 @@ def killMyPortSpy(pid, port): if __name__ == "__main__": if len(sys.argv) < 2: - print "Usage: " - print " %s " % os.path.basename(sys.argv[0]) - print - print "Kills SALOME session running on specified ." + print("Usage: ") + print(" %s " % os.path.basename(sys.argv[0])) + print() + print("Kills SALOME session running on specified .") sys.exit(1) pass if sys.argv[1] == "--spy": @@ -492,8 +408,8 @@ if __name__ == "__main__": try: from salomeContextUtils import setOmniOrbUserPath #@UnresolvedImport setOmniOrbUserPath() - except Exception, e: - print e + except Exception as e: + print(e) sys.exit(1) for port in sys.argv[1:]: killMyPort(port)