-\r
-import sys\r
-import os\r
-import subprocess\r
-if os.name == 'nt':\r
- import win32api\r
- import win32process\r
-\r
-class dummyobj (object):\r
- pass\r
-\r
-def safe_terminate_process_by_pid (pid, code):\r
- if os.name == 'nt':\r
- p = dummyobj ()\r
- p._handle = win32api.OpenProcess (2 | 1024 | 8 | 32 | 16, 0, pid)\r
- result = safe_terminate_process (p, code)\r
- win32api.CloseHandle (p._handle)\r
- return result\r
- else:\r
- return os.kill (int (pid), SIGKILL)\r
-\r
-def safe_terminate_process (proc, code):\r
- if os.name == 'nt':\r
- cp = win32api.GetCurrentProcess ()\r
- result = False\r
- dupproc = win32api.DuplicateHandle (cp, proc._handle, cp, 2 | 1024 | 8 | 32 | 16, 0, 0)\r
- try:\r
- exitcode = win32process.GetExitCodeProcess (dupproc)\r
- if exitcode == 0x103:\r
- kernel32 = win32api.GetModuleHandle ("kernel32")\r
- exitprocess = win32api.GetProcAddress (kernel32, "ExitProcess")\r
- th, tid = win32process.CreateRemoteThread (dupproc, None, 0, exitprocess, code, 0)\r
- win32api.CloseHandle (th)\r
- result = True\r
- else:\r
- result = True\r
- # except failed to get exit code? failed to get module handle?\r
- finally:\r
- win32api.CloseHandle (dupproc)\r
- return result\r
- else:\r
- return proc.kill ()\r
+
+import sys
+import os
+import subprocess
+if os.name == 'nt':
+ import win32api
+ import win32process
+
+class dummyobj (object):
+ pass
+
+def safe_terminate_process_by_pid (pid, code):
+ if os.name == 'nt':
+ p = dummyobj ()
+ p._handle = win32api.OpenProcess (2 | 1024 | 8 | 32 | 16, 0, pid)
+ result = safe_terminate_process (p, code)
+ win32api.CloseHandle (p._handle)
+ return result
+ else:
+ return os.kill (int (pid), SIGKILL)
+
+def safe_terminate_process (proc, code):
+ if os.name == 'nt':
+ cp = win32api.GetCurrentProcess ()
+ result = False
+ dupproc = win32api.DuplicateHandle (cp, proc._handle, cp, 2 | 1024 | 8 | 32 | 16, 0, 0)
+ try:
+ exitcode = win32process.GetExitCodeProcess (dupproc)
+ if exitcode == 0x103:
+ kernel32 = win32api.GetModuleHandle ("kernel32")
+ exitprocess = win32api.GetProcAddress (kernel32, "ExitProcess")
+ th, tid = win32process.CreateRemoteThread (dupproc, None, 0, exitprocess, code, 0)
+ win32api.CloseHandle (th)
+ result = True
+ else:
+ result = True
+ # except failed to get exit code? failed to get module handle?
+ finally:
+ win32api.CloseHandle (dupproc)
+ return result
+ else:
+ return proc.kill ()