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