Pythonの2.5では、どのように私はサブプロセスを殺すのですか?

StackOverflow https://stackoverflow.com/questions/1064335

  •  21-08-2019
  •  | 
  •  

質問

私は後で殺すために必要なサブプロセスを実行するためにPythonでサブプロセスパッケージを使用しています。しかし、サブプロセスパッケージのドキュメントは終了()関数は、2.6からのみ利用可能であることを述べて

私たちは2.5で、私は2.6にアップグレードすることはできません下位互換性の理由でLinuxを実行している、代替は何ですか?私は、これらの機能が何かのための便利なメソッドであることを推測しています。

役に立ちましたか?

解決

あなたは、プロセスpidにos.killを呼び出します。

os.kill(process.pid, signal.SIGKILL)

あなたがLinux上にしているのでOKです。 Windowsユーザーは、運が悪いです。

他のヒント

ガレスの答え@、Windows上で完了することができません:

import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, theprocess.pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)

os.kill(theprocess.pid, 9)ほどエレガントではないが、それは仕事をする; - )

ガレスさんと@Alex答え@完了するためには、あなたが下層システムを気にしたくない場合は、あなたが使用することができます<のhref =「http://code.google.com/p/psutil」のrel = "noreferrer"> psutil でます。

  

psutilモジュールが提供され   情報を取得するためのインタフェース   実行中のプロセスとシステム上の   での利用(CPU、メモリ)   パイソンを使用して、移植可能な方法、   多くの機能を実装します   psのようなコマンドラインツールが提供します、   トップ、殺すと、Windowsのタスクマネージャます。

     

これは、現時点ではLinux、OS Xをサポートしています   パイソンとFreeBSDとWindowsの   使用して2.4から3.1へのバージョン   ユニークなコードベースます。

コピー&PASE完全なソリューションザッツます:

def terminate_process(pid):
    # all this shit is because we are stuck with Python 2.5 and 
    # we cannot use Popen.terminate()
    if sys.platform == 'win32':
        import ctypes
        PROCESS_TERMINATE = 1
        handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, pid)
        ctypes.windll.kernel32.TerminateProcess(handle, -1)
        ctypes.windll.kernel32.CloseHandle(handle)
    else:
        os.kill(pid, signal.SIGKILL)

コメントとしてバグレポートを受け入れる;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top