1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import psutil
- import os
- import ctypes,inspect
- import traceback
- def _async_raise(tid, exctype):
- """raises the exception, performs cleanup if needed"""
- tid = ctypes.c_long(tid)
- if not inspect.isclass(exctype):
- exctype = type(exctype)
- res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
- if res == 0:
- raise ValueError("invalid thread id")
- elif res != 1:
- ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
- raise SystemError("PyThreadState_SetAsyncExc failed")
- def stop_thread(thread):
- if isinstance(thread,(int)):
- _ident = thread
- else:
- _ident = thread.ident
- print(_ident)
- _async_raise(_ident, SystemExit)
- for pid in [124564]:
- try:
- proc = psutil.Process(pid)
- exeFile = os.path.basename(proc.exe())
- threads = psutil._psutil_windows.proc_threads(pid)
- times = 0
- for thread in threads:
- print(thread)
- stop_thread(thread[0])
- for timeUsed in thread[1:]:
- times += timeUsed
- print('='*20)
- print('Exe file:', os.path.basename(proc.exe()))
- print('Number of threads:', len(threads))
- print('Time used:', times)
- except:
- traceback.print_exc()
|