#! /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
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):
"""
# 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',
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):
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):
# 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)
__killPids(pids)
# finally remove pidict file
- os.remove(filedict)
+ try:
+ os.remove(filedict)
+ except:
+ pass
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.
def _checkUserName(_process):
# The following is a workaround for Windows on which
# psutil.Process().username() returns 'usergroup' + 'username'
- return getUserName() == _process.username()
+ return getUserName() == _process.username().split('\\')[-1]
def _getDictfromOutput(_processes, _wildcard=None):
for _process in psutil.process_iter(['name', 'username']):