diff options
Diffstat (limited to 'contrib/terminate.py.in')
-rw-r--r-- | contrib/terminate.py.in | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/contrib/terminate.py.in b/contrib/terminate.py.in deleted file mode 100644 index 4a6719f38b..0000000000 --- a/contrib/terminate.py.in +++ /dev/null @@ -1,64 +0,0 @@ -#!@PYTHON@ -# This file is part of GNUnet. -# (C) 2011 Christian Grothoff (and other contributing authors) -# -# GNUnet is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published -# by the Free Software Foundation; either version 2, or (at your -# option) any later version. -# -# GNUnet is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNUnet; see the file COPYING. If not, write to the -# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# Utility module that implements safe process termination for W32. -# For other platforms it's equivalent to Popen.kill () -# Requires pywin32 on W32. - -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 () |