Pythonの2.5では、どのように私はサブプロセスを殺すのですか?
-
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)
コメントとしてバグレポートを受け入れる;)