2012-03-11 15 views
0

私は、現在実行中のすべてのPythonプロセスを(必要に応じて)強制終了しようとしています。
私は、このコマンドを使用していた。python subprocess.callを使用して実行中のすべてのPythonファイルを終了

from subprocess import call 
call('pkill python', shell=True) 
print 'Killed them all!' 

しかし、当然のことながら - 私のプログラムはまた、Pythonプログラムですので、最終的には、それが「コール」を呼び出した後、印刷ラインに到達しません。

他のすべてのPythonプロセスを強制終了しながら、プログラム自体も強制終了されないようにするにはどうすればよいですか?
ありがとうございます。

答えて

6

あなたは、クロスプラットフォームpsutilライブラリ試してみたいことがあります。

import os 
import psutil 

mypid = os.getpid() 
for proc in psutil.process_iter(): 
    if proc.name == 'python' and proc.pid != mypid: 
     proc.kill() 
+0

何もインストールする必要はありますか? 「psutilという名前のモジュールはありません」というメッセージが表示されます。 – limlim

+0

「ダウンロード」(http://code.google.com/p/psutil/downloads/list)または「pip install psutil」または「apt-get install python-psutil」を参照してください。 – bereal

+0

「クロスプラットフォーム」の場合+1。 – RanRag

0

pgrep pythonに電話すると、実行中のすべてのPythonプロセスのpid(プロセス識別子)を読むことができます。これにはおそらくsubprocess.check_outputが必要です。

次に、os.getpidを使って見つけた自分のpidと一致するものを除いて、それぞれを殺すpidを実行することができます(os.killを使用)。

+0

をそれは私に言う:「モジュール」オブジェクトには属性「check_output」を持っていない - 私が間違って>何をしているのですか? – limlim

+0

古いバージョンのPythonを使用している可能性があります。しかし、@ berealの解決策はきれいです。 –

関連する問題