[Wapt] Comment tuer un processus lors d'une commande run ?

Frederic Garesche Frederic.Garesche at insa-rennes.fr
Thu Jun 7 09:26:27 CEST 2018


Bonjour, 

Ok merci, je n'avais pas pensé au Start. 

Pour ceux que cela intéresserait, voici une fonction pour tuer une liste de processus après un certain laps de temps : 

def waitprocessfinish(exenames, waittime=20): 
"""wait for the process to be completed or timeout > waittime 

Args: 
exenames : list of pending processes 
waittime : timeout in seconds. No timeout if waittime=None 
>>> waitprocessfinish('MATLAB.exe') 
>>> waitprocessfinish(['MATLAB.exe','cmd.exe'], waittime=None) 
""" 
def on_terminate(proc): 
print("process {} terminated with exit code {}".format(proc, proc.returncode)) 

procs = [] 
logger.debug('Wait process finish %s' % (exenames,)) 
if not isinstance(exenames,list): 
exenames = [exenames] 
exenames = [exe.lower() for exe in exenames]+[exe.lower()+'.exe' for exe in exenames] 
for p in psutil.process_iter(): 
try: 
if p.name().lower() in exenames: 
procs.append(p) 
except (psutil.AccessDenied,psutil.NoSuchProcess): 
pass 
logger.debug('Wait process finish %i' % (p.pid,)) 
gone, alive = psutil.wait_procs(procs, timeout=waittime, callback=None) 
for p in alive: p.kill() 

Je me suis fortement inspiré de la fonction "killalltasks" et de ce que j'ai trouvé sur le net. 
Je n'ai pas compris grand chose à ce que j'ai fait mais cela fonctionne ^^ 
La fonction def on_terminate(proc): sert au callback de psutil.wait_procs mais je ne l'ai pas intégré. 

Frédéric G 



De: "Denis Cardon" <dcardon at tranquil.it> 
À: "Frederic Garesche" <Frederic.Garesche at insa-rennes.fr>, wapt at lists.tranquil.it 
Envoyé: Mardi 5 Juin 2018 18:03:42 
Objet: Re: [Wapt] Comment tuer un processus lors d'une commande run ? 

Bonjour Frédéric, 

> Je suis dans la création d'un paquet pour Cadence OrCAD 17.2 
> Les modules "OrCAD Products" s'installent bien. 
> Par contre il y a un processus(cdnshelpindexer.exe) qui ne fonctionne 
> pas correctement lors de l'installation des modules "Allegro Products". 
> 
> Savez-vous comment tuer un processus alors que la fonction run est 
> en-cours ? 

pour kiler un process, on peut le faire avec la commande suivante (en 
prenant pas exemple firefox.exe). 
run(r'taskkill /f /im firefox.exe') 

Par contre dans votre cas, il faudrait "threader" le run() pour 
surveiller le processus en question et le killé le moment voulu. Je ne 
pense pas que c'est forcément une bonne idée de faire du threading dans 
le setup.py. 

Vous pouvez essayer de rendre l'installeur "non bloquant" avec un 
run('START /B moninstalleur.exe') et après mettre une boucle pour 
vérifier quel process est entrain de tourner et le killer le cas 
échéant. Il ne faut pas sortir du setup.py tant que l'installation n'est 
pas fini, sinon l'agent WAPT killera tout dans sa procédure de nettoyage 
post setup.py. 

Si le process cdnshelpindexer.exe est le dernier qui reste à la fin, 
vous pouvez rajouter un timeout plus court si l'installeur met à peu 
prêt toujours le même temps pour s'installer. 

Cordialement, 

Denis 

> 
> Cordialement, 
> 
> *Frédéric G* 
> 
> 
> _______________________________________________ 
> WAPT mailing list 
> WAPT at lists.tranquil.it 
> http://lists.tranquil.it/listinfo/wapt 
> 

-- 
Denis Cardon 
Tranquil IT Systems 
Les Espaces Jules Verne, bâtiment A 
12 avenue Jules Verne 
44230 Saint Sébastien sur Loire 
tel : +33 (0) 2.40.97.57.55 
http://www.tranquil.it 

Samba install wiki for Frenchies : https://dev.tranquil.it 
WAPT, software deployment made easy : https://wapt.fr 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.tranquil.it/pipermail/wapt/attachments/20180607/e923ecf9/attachment.html>


More information about the WAPT mailing list