web-dev-qa-db-ja.com

Pythonのsubprocess.Popen()で作成されたプロセスを強制終了する

私の考えは次のとおりです。

まず、subprocess.Popenを使用してプロセスを作成しました

第二に、一定の時間の後、私はPopen.kill()によってそれを殺そうとしました。

_import subprocess
import os, signal
import time

proc1 = subprocess.Popen("kvm -hda /path/xp.img", Shell = True)
time.sleep(2.0)
print 'proc1 = ', proc1.pid
subprocess.Popen.kill(proc1)
_

ただし、Popen.kill()の後も「proc1」が存在します。この問題を解決する方法を専門家に教えてもらえますか?ご検討いただきありがとうございます。

すべての専門家からのコメントのおかげで、私はあなたが推薦したすべてをしましたが、結果は同じままです。

proc1.kill() #it sill cannot kill the proc1

_os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1
_

みんなありがとう。

そして、この繊細な問題を解決する貴重な経験を待っています。

49
user495511

あなたのコードでは

proc1.kill()

killまたはterminateは両方とも、信号を送信するPopenオブジェクトのメソッドですsignal.SIGKILLプロセスに。

27
pyfunc

Shell=Trueを使用している場合、process.terminate()は機能しません。これは answer に役立ちます。

14
metanoia5

Popen killメソッドのみを使用します

process = subprocess.Popen(
    task.getExecutable(), 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    Shell=True
)
process.kill()
8

Os.killを使用してはどうですか?こちらのドキュメントをご覧ください。 http://docs.python.org/library/os.html#os.kill

0