子プロセスまで殺す方法

import subprocess, time
import win32api

DEVENV   = '"C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com"'
SLNFILE  = "sample.sln"
cmd = "%s %s /build debug" %(DEVENV, SLNFILE)

process = subprocess.Popen(cmd, shell=False)
time.sleep(5)
win32api.TerminateProcess(int(process._handle), -1)

↑こんなかんじで、ビルドにある程度時間のかかるソリューションで試すと、
devenv.exeとcl.exeが動いたままになっている。
vcspawn.exeというのも動いている。


pythonがdevenv.comを起動
devenv.comがdevenv.exeを起動、
devenv.exeがcl.exeを起動
という関係だろうか。


pythonがkillしてるのはdevenv.comだと思が、
その子プロセスのdevenv.exeやcl.exeまで死んでない様子。
devenv.exeやcl.exeまで殺す、うまい方法はないのか。


▼devenvのマニュアル
http://msdn2.microsoft.com/ja-jp/library/xee0c8y7.aspx

Python ctypes
http://prdownloads.sourceforge.net/ctypes/

▼プロセス名を指定して殺すサンプル
Python24/Lib/site-packages/win32/scripts/killProcName.py

▼child processを走らすサンプル
Python24/Lib/site-packages/win32/Demos/winprocess.py


▼TerminateProcess
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_terminateprocess.htm
「プロセスを終了させても、その子プロセスが終了することはありません。」だと。
TerminateProcessは安易に使っちゃいけないのか?


▼ExitProcess
http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_exitprocess.htm
これを使えばよさそうだが、Pythonから呼べるのか?
これもダメ。


Windows API CreateToolhelp32Snapshot プロセスの列挙
http://www.geocities.jp/i96815/windows/win07.html
Python ctypes
http://starship.python.net/crew/theller/ctypes/tutorial.html
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/305279