[python] 이름으로 프로세스를 종료 하시겠습니까?

프로세스 (특히 iChat)를 종료하려고합니다. 명령 줄에서 다음 명령을 사용합니다.

ps -A | grep iChat 

그때:

kill -9 PID

그러나 이러한 명령을 Python으로 변환하는 방법을 정확히 모르겠습니다.



답변

유닉스 계열 플랫폼에 있다고 가정하면 ( ps -A존재합니다),

>>> import subprocess, signal
>>> import os
>>> 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사용할 수 있지만, 저는 그 스타일이 특히 마음에 들지 않으므로이 방식으로 명명 된 상수를 사용하고 싶습니다).9signal.SIGKILL

물론이 라인에서 훨씬 더 정교한 처리를 할 수 있지만 이것은 쉘에서 수행하는 작업을 모방합니다.

피하는 것이 ps, 다른 유닉스 계열 시스템에서 수행하기 어렵다 ps면 (어떤 의미에서 프로세스 목록을 얻는 공통 API입니다). 그러나 특정 Unix 계열 시스템을 염두에두고 있다면 (크로스 플랫폼 이식성이 필요하지 않음) 가능할 수 있습니다. 특히 Linux에서는 /proc의사 파일 시스템이 매우 유용합니다. 그러나이 후반부에 도움을 드릴 수 있으려면 정확한 요구 사항을 명확히해야합니다.


답변

psutil 은 이름으로 프로세스를 찾고 종료 할 수 있습니다.

import psutil

PROCNAME = "python.exe"

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


답변

크로스 플랫폼이되기 위해 Windows 사례를 고려해야하는 경우 다음을 시도하십시오.

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


답변

killall이있는 경우 :

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

또는:

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


답변

이것은 Windows 7에서 나를 위해 일했습니다.

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


답변

이것을 시도 할 수 있습니다. 하지만 당신은 설치해야합니다 전에 psutil 사용sudo pip install psutil

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


답변

아래 코드는 모든 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)