Подтвердить что ты не робот

Убить процесс по имени?

Я пытаюсь убить процесс (в частности, iChat). В командной строке я использую следующие команды:

ps -A | grep iChat 

Тогда:

kill -9 PID

Однако я не совсем уверен, как перевести эти команды на Python.

4b9b3361

Ответ 1

Предполагая, что вы на Unix-подобной платформе (так что ps -A существует),

>>> import subprocess, signal
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()

дает вам ps -A вывод в переменной out (строка). Вы можете разбить его на строки и петли на них...:

>>> for line in out.splitlines():
...   if 'iChat' in line:
...     pid = int(line.split(None, 1)[0])
...     os.kill(pid, signal.SIGKILL)
... 

(вы можете избежать импорта signal и использовать 9 вместо signal.SIGKILL), но мне просто не нравится этот стиль, поэтому я бы скорее использовал именованную константу).

Конечно, вы можете сделать гораздо более сложную обработку на этих строках, но это подражает тем, что вы делаете в оболочке.

Если вы избегаете ps, это трудно сделать в разных Unix-подобных системах (ps - это их общий API, чтобы получить список процессов в некотором смысле). Но если у вас есть определенная Unix-подобная система, только (не требующая кросс-платформенной переносимости), это может быть возможно; в частности, в Linux, псевдо файловая система /proc очень полезна. Но вам нужно будет уточнить ваши точные требования, прежде чем мы сможем помочь в этой последней части.

Ответ 2

psutil может найти процесс по имени и убить его:

import psutil

PROCNAME = "python.exe"

for proc in psutil.process_iter():
    # check whether the process name matches
    if proc.name() == PROCNAME:
        proc.kill()

Ответ 3

Если вам нужно рассмотреть случай Windows, чтобы быть кросс-платформенным, попробуйте следующее:

os.system('taskkill /f /im exampleProcess.exe')

Ответ 4

Если у вас есть killall:

os.system("killall -9 iChat");

Или:

os.system("ps -C iChat -o pid=|xargs kill -9")

Ответ 5

это работало для меня в Windows 7

import subprocess
subprocess.call("taskkill /IM geckodriver.exe")

Ответ 6

Приведенный ниже код убьет все ориентированные на 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)

Ответ 7

Вы можете использовать pkill <process_name> в Unix-системе, чтобы убить процесс по имени.

Тогда код python будет выглядеть следующим образом:

>>> import os
>>> process_name=iChat
>>> os.system('pkill '+process_name)

Ответ 8

Для меня единственное, что сработало, было:

Например

import subprocess
proc = subprocess.Popen(["pkill", "-f", "scriptName.py"], stdout=subprocess.PIPE)
proc.wait()

Ответ 9

Если вы хотите убить процесс или cmd.exe с определенным заголовком.

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 ) 

Надеюсь, это поможет. Их может быть множество лучших решений для моего.

Ответ 10

вы можете использовать WMI-модуль для этого в Windows, хотя он намного clunkier, чем вы используете для UNIX-пользователей; import WMI занимает много времени, и между ними возникает промежуточная боль.

Ответ 11

9 представляет сигнал SIGKILL. Таким образом, вы можете использовать KILL вместо 9

os.system("kill -s KILL 1234")

0r

os.sytem("kill -KILL 1234")

Ответ 12

вы можете попробовать это. перед установкой psutil с помощью sudo pip install psutil

import psutil
for proc in psutil.process_iter(attrs=['pid', 'name']):
    if 'ichat' in proc.info['name']:
        proc.kill()

Ответ 13

import os
os.popen("kill -9 $(ps aux | grep  " + processname + " | awk '{print $2}')")

Ответ 14

вы можете использовать эти точные команды из python, такие как

import os 
print os.system('kill -9 ' + pid)

Но ваша команда на получение pid требует немного работы (не может просто предполагать только потому, что у нее есть iChat, что это действительно iChat), вы должны использовать killall вместо этого, как предположил Мэтью Флашен

Ответ 15

import psutil
pid_list=psutil.get_pid_list()
print pid_list
p = psutil.Process(1052)
print p.name
for i in pid_list:
    p = psutil.Process(i)
    p_name=p.name
    print str(i)+" "+str(p.name)
    if p_name=="PerfExp.exe":
        print "*"*20+" mam ho "+"*"*20
        p.kill()