From 52199cbbd4882715a15157c4edb1a26e70577f93 Mon Sep 17 00:00:00 2001 From: Marcio Fernandes Date: Thu, 20 Jan 2022 14:19:20 +0000 Subject: [PATCH] . --- onlyone/__init__.py | 54 +++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/onlyone/__init__.py b/onlyone/__init__.py index a8dda0e..f9a2526 100644 --- a/onlyone/__init__.py +++ b/onlyone/__init__.py @@ -8,25 +8,29 @@ log = logging.getLogger(__name__) def __is_process(cmd:str, arr): item = " ".join(arr) - log.info("[onlyone][startprocess] -> " + item + " ends with " + cmd) + #log.info("[onlyone][startprocess] -> " + item + " ends with " + cmd) if(item.endswith(cmd)): return True - log.info("[onlyone][startprocess] -> " + item + " ends with " + cmd.replace("\"", "")) + #log.info("[onlyone][startprocess] -> " + item + " ends with " + cmd.replace("\"", "")) if(item.endswith(cmd.replace("\"", ""))): return True - log.info("[onlyone][startprocess] -> " + item + " eq " + cmd) + #log.info("[onlyone][startprocess] -> " + item + " eq " + cmd) if(item == cmd): return True - log.info("[onlyone][startprocess] -> " + item + " eq " + cmd.replace("\"", "")) + #log.info("[onlyone][startprocess] -> " + item + " eq " + cmd.replace("\"", "")) + if(item == cmd.replace("\"", "")): return True - log.info("compare finished not equal") + #log.info("compare finished not equal") return False def isrunning(cmd:str): - for proc in psutil.process_iter(): + return __is_process(cmd, psutil.process_iter()) + +def __isrunning(cmd:str, processes): + for proc in processes: if __is_process(cmd,proc.cmdline()): return True return False @@ -46,8 +50,12 @@ def __killprocesses(killcmds:List, sysprocesses: List): return False for proc in sysprocesses: if any( __is_process(x, proc.cmdline()) for x in killcmds): - proc.kill() - log.info("[onlyone][__killprocesses] -> processed killed : " + proc.name()) + try: + log.info("[onlyone][__killprocesses] -> processed killed : " + proc.name()) + except: + log.info("[onlyone][__killprocesses] -> error killing process") + + return False @@ -55,26 +63,28 @@ def killprocesses(killcmds:List): return __killprocesses(killcmds, psutil.process_iter()) -def __forceoneprocessinstance(cmd:str, processes:List): - found = False - for proc in processes: - if __is_process(cmd, proc.cmdline()): - if found: - proc.kill() - log.info("[onlyone][__forceoneprocessinstance] -> processed killed : " + proc.name + "(" + proc.id + ")") - else : - found = True - if not found: - startprocess(cmd) +# def __forceoneprocessinstance(cmd:str, processes:List): +# found = False +# for proc in processes: +# if __is_process(cmd, proc.cmdline()): +# if found: +# proc.kill() +# log.info("[onlyone][__forceoneprocessinstance] -> processed killed : " + proc.name + "(" + proc.id + ")") +# else : +# found = True +# if not found: +# startprocess(cmd) -def forceoneprocessinstance(cmd:str): - return __forceoneprocessinstance(cmd, psutil.process_iter()) +# def forceoneprocessinstance(cmd:str): +# return __forceoneprocessinstance(cmd, psutil.process_iter()) def onlyone(cmd:str, killcmds:list): log.info("[onlyone][onlyone] -> invoked start " + cmd + ", kill " + str(killcmds)) processes = psutil.process_iter() __killprocesses(killcmds, processes) - __forceoneprocessinstance(cmd, processes) + if (not(__isrunning(cmd, processes))): + startprocess(cmd) + #__forceoneprocessinstance(cmd, processes) class Manager: def __init__(self):