J'essaie de tuer un processus (en particulier iChat). Sur la ligne de commande, j'utilise ces commandes:
ps -A | grep iChat
Ensuite:
kill -9 PID
Cependant, je ne sais pas exactement comment traduire ces commandes en Python.
En supposant que vous soyez sur une plate-forme de type Unix (pour que ps -A
existe),
>>> import subprocess, signal
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
vous donne la sortie de ps -A
dans la variable out
(une chaîne). Vous pouvez le décomposer en lignes et les boucler ...:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
(vous pouvez éviter d'importer signal
et utiliser 9
au lieu de signal.SIGKILL
, mais je n'aime pas particulièrement ce style, je préfère donc utiliser la constante nommée de cette façon).
Bien sûr, vous pourriez effectuer un traitement beaucoup plus sophistiqué sur ces lignes, mais cela ressemble à ce que vous faites dans Shell.
Si vous cherchez à éviter ps
, il est difficile de le faire sur différents systèmes de type Unix (ps
est leur API commune pour obtenir une liste de processus, dans un sens). Mais si vous avez à l’esprit un système spécifique de type Unix, cela ne sera peut-être pas nécessaire (ne nécessitant aucune portabilité multiplate-forme); en particulier, sous Linux, le pseudo-système de fichiers /proc
est très utile. Mais vous aurez besoin de clarifier vos exigences exactes avant que nous puissions vous aider sur cette dernière partie.
psutil peut trouver un processus par son nom et le tuer:
import psutil
PROCNAME = "python.exe"
for proc in psutil.process_iter():
# check whether the process name matches
if proc.name() == PROCNAME:
proc.kill()
Si vous devez considérer le cas Windows pour être multi-plateforme, essayez ce qui suit:
os.system('taskkill /f /im exampleProcess.exe')
Si vous avez killall:
os.system("killall -9 iChat");
Ou:
os.system("ps -C iChat -o pid=|xargs kill -9")
cela a fonctionné pour moi dans Windows 7
import subprocess
subprocess.call("taskkill /IM geckodriver.exe")
Le code ci-dessous supprimera tous les programmes orientés iChat:
p = subprocess.Popen(['pgrep', '-l' , 'iChat'], stdout=subprocess.PIPE)
out, err = p.communicate()
for line in out.splitlines():
line = bytes.decode(line)
pid = int(line.split(None, 1)[0])
os.kill(pid, signal.SIGKILL)
Vous pouvez utiliser pkill <process_name>
dans un système unix pour tuer le processus par son nom.
Ensuite, le code python sera:
>>> import os
>>> process_name=iChat
>>> os.system('pkill '+process_name)
Pour moi, la seule chose qui a fonctionné est:
Par exemple
import subprocess
proc = subprocess.Popen(["pkill", "-f", "scriptName.py"], stdout=subprocess.PIPE)
proc.wait()
Si vous souhaitez supprimer le ou les processus ou cmd.exe portant un titre particulier.
import csv, os
import subprocess
# ## Find the command Prompt windows.
# ## Collect the details of the command Prompt windows and assign them.
tasks = csv.DictReader(subprocess.check_output('tasklist /fi "imagename eq cmd.exe" /v /fo csv').splitlines(), delimiter=',', quotechar='"')
# ## The cmds with titles to be closed.
titles= ["Ploter", "scanFolder"]
# ## Find the PIDs of the cmds with the above titles.
PIDList = []
for line in tasks:
for title in titles:
if title in line['Window Title']:
print line['Window Title']
PIDList.append(line['PID'])
# ## Kill the CMDs carrying the PIDs in PIDList
for id in PIDList:
os.system('taskkill /pid ' + id )
J'espère que ça aide. Leur pourrait être de nombreuses meilleures solutions à la mienne.
import os
os.popen("kill -9 $(ps aux | grep " + processname + " | awk '{print $2}')")
9 représente le signal SIGKILL. Vous pouvez donc utiliser KILL
à la place de 9
os.system("kill -s KILL 1234")
0r
os.sytem("kill -KILL 1234")
vous pouvez utiliser le module WMI pour le faire sous Windows, bien que ce soit beaucoup plus bruyant que ce à quoi vous êtes habitués unix import WMI
prend beaucoup de temps et il y a une douleur intermédiaire à obtenir au processus.
vous pouvez essayer ceci ... avant de devoir installer psutil en utilisant Sudo pip install psutil
import psutil
for proc in psutil.process_iter(attrs=['pid', 'name']):
if 'ichat' in proc.info['name']:
proc.kill()