| Index: src/third_party/pylib/mozrunner/wpk.py
|
| ===================================================================
|
| --- src/third_party/pylib/mozrunner/wpk.py (revision 9275)
|
| +++ src/third_party/pylib/mozrunner/wpk.py (working copy)
|
| @@ -1,81 +0,0 @@
|
| -from ctypes import sizeof, windll, addressof, c_wchar, create_unicode_buffer
|
| -from ctypes.wintypes import DWORD, HANDLE
|
| -
|
| -PROCESS_TERMINATE = 0x0001
|
| -PROCESS_QUERY_INFORMATION = 0x0400
|
| -PROCESS_VM_READ = 0x0010
|
| -
|
| -def get_pids(process_name):
|
| - BIG_ARRAY = DWORD * 4096
|
| - processes = BIG_ARRAY()
|
| - needed = DWORD()
|
| -
|
| - pids = []
|
| - result = windll.psapi.EnumProcesses(processes,
|
| - sizeof(processes),
|
| - addressof(needed))
|
| - if not result:
|
| - return pids
|
| -
|
| - num_results = needed.value / sizeof(DWORD)
|
| -
|
| - for i in range(num_results):
|
| - pid = processes[i]
|
| - process = windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION |
|
| - PROCESS_VM_READ,
|
| - 0, pid)
|
| - if process:
|
| - module = HANDLE()
|
| - result = windll.psapi.EnumProcessModules(process,
|
| - addressof(module),
|
| - sizeof(module),
|
| - addressof(needed))
|
| - if result:
|
| - name = create_unicode_buffer(1024)
|
| - result = windll.psapi.GetModuleBaseNameW(process, module,
|
| - name, len(name))
|
| - # TODO: This might not be the best way to
|
| - # match a process name; maybe use a regexp instead.
|
| - if name.value.startswith(process_name):
|
| - pids.append(pid)
|
| - windll.kernel32.CloseHandle(module)
|
| - windll.kernel32.CloseHandle(process)
|
| -
|
| - return pids
|
| -
|
| -def kill_pid(pid):
|
| - process = windll.kernel32.OpenProcess(PROCESS_TERMINATE, 0, pid)
|
| - if process:
|
| - windll.kernel32.TerminateProcess(process, 0)
|
| - windll.kernel32.CloseHandle(process)
|
| -
|
| -def kill_process_by_name(name):
|
| - pids = get_pids(name)
|
| - for pid in pids:
|
| - kill_pid(pid)
|
| -
|
| -if __name__ == '__main__':
|
| - import subprocess
|
| - import time
|
| -
|
| - # This test just opens a new notepad instance and kills it.
|
| -
|
| - name = 'notepad'
|
| -
|
| - old_pids = set(get_pids(name))
|
| - subprocess.Popen([name])
|
| - time.sleep(0.25)
|
| - new_pids = set(get_pids(name)).difference(old_pids)
|
| -
|
| - if len(new_pids) != 1:
|
| - raise Exception('%s was not opened or get_pids() is '
|
| - 'malfunctioning' % name)
|
| -
|
| - kill_pid(tuple(new_pids)[0])
|
| -
|
| - newest_pids = set(get_pids(name)).difference(old_pids)
|
| -
|
| - if len(newest_pids) != 0:
|
| - raise Exception('kill_pid() is malfunctioning')
|
| -
|
| - print "Test passed."
|
|
|