web-dev-qa-db-ja.com

名前でプロセスを強制終了しますか?

プロセス(具体的にはiChat)を強制終了しようとしています。コマンドラインでは、次のコマンドを使用します。

ps -A | grep iChat 

次に:

kill -9 PID

ただし、これらのコマンドをPythonに変換する方法は正確にはわかりません。

81
Aaron

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疑似ファイルシステムが非常に役立ちます。ただし、この後半部分を支援する前に、正確な要件を明確にする必要があります。

75
Alex Martelli

psutil は、名前でプロセスを見つけて強制終了できます。

import psutil

PROCNAME = "python.exe"

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

クロスプラットフォームであるためにWindowsの場合を考慮する必要がある場合は、次を試してください。

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

Killallがある場合:

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

または:

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

これはWindows 7で私のために働いた

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

以下のコードは、すべての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)
2
Poobalan

UNIXシステムでpkill <process_name>を使用して、名前でプロセスを強制終了できます。

pythonコードは次のようになります。

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

私のために働いた唯一のものは次のとおりです。

例えば

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

特定のタイトルを保持しているプロセスまたは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 ) 

それが役に立てば幸い。それらは、私のより良い解決策であるかもしれません。

1

これを試すことができます. psutilSudo pip install psutilを使用してインストールする前に

import psutil
for proc in psutil.process_iter(attrs=['pid', 'name']):
    if 'ichat' in proc.info['name']:
        proc.kill()
1
import os
os.popen("kill -9 $(ps aux | grep  " + processname + " | awk '{print $2}')")
0
ishandutta2007

9はSIGKILLシグナルを表します。したがって、9の代わりにKILLを使用できます

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

0r

os.sytem("kill -KILL 1234")
0
SuperNova

wMIモジュールを使用してWindowsでこれを行うことができますが、Unixのユーザーが慣れているよりもかなり不格好です。 import WMIには長い時間がかかり、そのプロセスに中程度の痛みがあります。

0
amwinter