2015-12-17 3 views
0

dans mon script je reçois un identifiant de processus (parent/principal)tuer un processus et ses sous-processus dans un script python

pour ce processus principal id 3-4 plusieurs sous-processus en cours d'exécution dans le terminal linux

Mon exigence est que ce processus détruise tous les sous-processus et sous-processus.

j'ai essayé

import os 
pid = parent process id 
from subprocess import call 
call(["pkill", "-TERM","-P", str(pid)]) 

Mais pas RÉUSSI à faire.

également essayé

os.system('kill -9 ' + pid) # only parent is getting killed subpid are still running. 

S'il vous plaît suggérer quelque chose comme la liste de tous processus sous par leur processus principal id.then en boucle comment tuer ceux-ci et ensuite le processus parent.

kill process and its sub/co-processes by getting their parent pid by python script

Malheureusement, ce n'était pas utile dans mon cas.

+0

@ JohnZwinck-n'aide pas non plus. – Satya

+3

Pourquoi ça n'aide pas? Quels sont les problèmes spécifiques que vous avez avec ces solutions? – Mel

+0

@Satya: Je pense que la première étape que vous devez suivre est de "créer un groupe de processus" qui contient tous les processus que vous souhaitez tuer plus tard. En d'autres termes, ce n'est pas seulement la façon de résoudre ce problème en Python, mais aussi de faire disparaître le problème en utilisant des groupes de processus qui sont la manière conventionnelle de résoudre ce problème sur les systèmes * nix. –

Répondre

0

Utilisez psutil pour cela.

import signal 
import psutil 

def kill(ppid, signal=signal.SIGTERM): 
    try: 
     process = psutil.Process(ppid) 
    except psutil.NoSuchProcess: 
     return 
    pids = process.get_children(recursive=True) 
    for pid in pids: 
     os.kill(pid.pid, signal) 
+0

@ Zetysz-TypeError: types unorderable: str() < int() – Satya

+0

Et quand je suis en train d'imprimer type de id parent, il est Satya

+0

@Satya donnent comme int – Zety