Module: MswinBuild::ProcessTree
- Extended by:
- Fiddle::Importer
- Includes:
- Fiddle::Win32Types
- Defined in:
- lib/mswin-build/process_tree.rb
Constant Summary collapse
- TH32CS_SNAPPROCESS =
from tlhelp32.h
0x00000002- PROCESSENTRY32 =
struct([ "DWORD dwSize", "DWORD cntUsage", "DWORD th32ProcessID", "ULONG_PTR th32DefaultHeapID", "DWORD th32ModuleID", "DWORD cntThreads", "DWORD th32ParentProcessID", "long pcPriClassBase", "DWORD dwFlags", "TCHAR szExeFile[260]", # [MAX_PATH] ])
Class Method Summary collapse
Class Method Details
.terminate_process_tree(pid, code = 0) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/mswin-build/process_tree.rb', line 49 def self.terminate_process_tree(pid, code = 0) begin terminated = 0 h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) unless pid == Process.pid Process.kill(:KILL, pid) terminated += 1 end pe32 = PROCESSENTRY32.malloc pe32.dwSize = PROCESSENTRY32.size if Process32First(h, pe32) != 0 begin if pe32.th32ParentProcessID == pid terminated += terminate_process_tree(pe32.th32ProcessID, code) end end while Process32Next(h, pe32) != 0 else raise sprintf("Cannot get processes: %d", GetLastError()) end ensure CloseHandle(h) if h end if pid == Process.pid Process.kill(:KILL, pid) terminated += 1 end terminated end |