プロセス(具体的にはiChat)を強制終了しようとしています。コマンドラインでは、次のコマンドを使用します。
ps -A | grep iChat
次に:
kill -9 PID
ただし、これらのコマンドをPythonに変換する方法は正確にはわかりません。
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
疑似ファイルシステムが非常に役立ちます。ただし、この後半部分を支援する前に、正確な要件を明確にする必要があります。
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")
以下のコードは、すべての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)
UNIXシステムでpkill <process_name>
を使用して、名前でプロセスを強制終了できます。
pythonコードは次のようになります。
>>> import os
>>> process_name=iChat
>>> os.system('pkill '+process_name)
私のために働いた唯一のものは次のとおりです。
例えば
import subprocess
proc = subprocess.Popen(["pkill", "-f", "scriptName.py"], stdout=subprocess.PIPE)
proc.wait()
特定のタイトルを保持しているプロセスまたは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 )
それが役に立てば幸い。それらは、私のより良い解決策であるかもしれません。
これを試すことができます. psutilSudo pip install psutil
を使用してインストールする前に
import psutil
for proc in psutil.process_iter(attrs=['pid', 'name']):
if 'ichat' in proc.info['name']:
proc.kill()
import os
os.popen("kill -9 $(ps aux | grep " + processname + " | awk '{print $2}')")
9はSIGKILLシグナルを表します。したがって、9の代わりにKILL
を使用できます
os.system("kill -s KILL 1234")
0r
os.sytem("kill -KILL 1234")
wMIモジュールを使用してWindowsでこれを行うことができますが、Unixのユーザーが慣れているよりもかなり不格好です。 import WMI
には長い時間がかかり、そのプロセスに中程度の痛みがあります。