Salome HOME
Increase time let to SALOME_Session_Server process to startup and retrieve its PID...
[modules/kernel.git] / bin / killSalomeWithPort.py
index d30d030b9739706eb830df48a042b0c96f4a53c6..9adacfdff24071af3843124b05e18bc857aa1c68 100755 (executable)
@@ -1,6 +1,6 @@
 #! /usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2022  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
@@ -65,6 +65,8 @@ import psutil
 
 from salome_utils import (generateFileName, getHostName, getLogDir, getShortHostName,
                           getUserName, killOmniNames, killPid, verbose)
+import logging
+logger = logging.getLogger()
 
 def getPiDict(port, appname='salome', full=True, hidden=True, hostname=None):
     """
@@ -123,8 +125,7 @@ def appliCleanOmniOrbConfig(port):
         # outside application context
         return
 
-    if verbose():
-        print("Cleaning OmniOrb config for port {}".format(port))
+    logging.getLogger().debug("Cleaning OmniOrb config for port {}".format(port))
 
     omniorb_config = generateFileName(omniorb_user_path,
                                       prefix='omniORB',
@@ -139,9 +140,10 @@ def appliCleanOmniOrbConfig(port):
                                            extension='cfg',
                                            hidden=True,
                                            with_username=True)
-
-    if os.access(last_running_config, os.F_OK):
-        if sys.platform == 'win32' or osp.samefile(last_running_config, omniorb_config):
+    logging.getLogger().debug("Omniorb_config file deduced by port : {}".format(omniorb_config))
+    logging.getLogger().debug("Omniorb_config file of last : {}".format(last_running_config))
+    if osp.exists(last_running_config):
+        if sys.platform == 'win32' or ( osp.exists(omniorb_config) and osp.samefile(last_running_config,omniorb_config) ):
             os.remove(last_running_config)
 
     if os.access(omniorb_config, os.F_OK):
@@ -247,10 +249,10 @@ def __killPids(pids):
     processes = []
     for pid in pids:
         try:
+            logger.debug("Add process with PID = {} into PIDList to kill".format(pid))
             processes.append(psutil.Process(pid))
         except psutil.NoSuchProcess:
-            if verbose():
-                print("  ------------------ Process {} not found".format(pid))
+            logger.debug("  ------------------ Process {} not found".format(pid))
     __killProcesses(processes)
 
 def __killMyPort(port, filedict):
@@ -262,7 +264,7 @@ def __killMyPort(port, filedict):
     # ensure port is an integer
     with suppress(ValueError):
         port = int(port)
-
+    logger.debug("Into __killMyPort with port {}. File containing PID to kill is {}".format(port,filedict))
     # read pids from pidict file
     with suppress(Exception), open(filedict, 'rb') as fpid:
         pids_lists = pickle.load(fpid)
@@ -271,7 +273,10 @@ def __killMyPort(port, filedict):
             __killPids(pids)
 
     # finally remove pidict file
-    os.remove(filedict)
+    try:
+        os.remove(filedict)
+    except:
+        pass
 
 def __guessPiDictFilename(port):
     """
@@ -299,6 +304,40 @@ def __guessPiDictFilename(port):
 
     return None
 
+def killProcessSSL(port, pids_list):
+    """ Called by runSalome.py after CTRL-C.
+    This method :
+    - Kill all PIDS in pids
+    - update file of pidict 
+    """
+    __killPids(pids_list)
+
+    with suppress(ValueError):
+        port = int(port)
+        
+    for filedict in glob('{}*'.format(getPiDict(port))):
+        with suppress(Exception), open(filedict, 'rb') as fpid:
+            logging.getLogger().debug("Removing following PIDS from file \"{}\" : {}"
+            .format(filedict,pids_list))
+            pids_lists_in_file = pickle.load(fpid)
+        for dico_of_pids in pids_lists_in_file:
+            for pid in pids_list:
+                if pid in dico_of_pids:
+                    del dico_of_pids[pid]
+        pids_lists_in_file = [elt for elt in pids_lists_in_file if len(elt)>0]
+        if len(pids_lists_in_file) == 0:
+            try:
+                logging.getLogger().debug("List of PIDS to Kill is now empty -> Remove file \"{}\"".format(filedict))
+                os.remove(filedict)
+            except:
+                pass
+            continue
+        with suppress(Exception), open(filedict, 'wb') as fpid:
+            logging.getLogger().debug("Writing back into file \"{}\"".format(filedict))
+            pickle.dump(pids_lists_in_file,fpid)
+    # clear-up omniOrb config files
+    appliCleanOmniOrbConfig(port)
+
 def killMyPort(*ports):
     """
     Kill SALOME session running on the specified port.