opensubscriber
   Find in this group all groups
 
Unknown more information…

g : gnunet-svn@gnu.org 13 July 2012 • 5:08AM -0400

[GNUnet-SVN] r22624 - gnunet/contrib
by gnunet

REPLY TO AUTHOR
 
REPLY TO GROUP




Author: LRN
Date: 2012-07-12 23:08:44 +0200 (Thu, 12 Jul 2012)
New Revision: 22624

Added:
   gnunet/contrib/terminate.py.in
Log:
Missing file

Added: gnunet/contrib/terminate.py.in
===================================================================
--- gnunet/contrib/terminate.py.in                         (rev 0)
+++ gnunet/contrib/terminate.py.in 2012-07-12 21:08:44 UTC (rev 22624)
@@ -0,0 +1,64 @@
+#!@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., 59 Temple Place - Suite 330,
+#    Boston, MA 02111-1307, 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 ()


_______________________________________________
GNUnet-SVN mailing list
GNUnet-SVN@gnu....
https://lists.gnu.org/mailman/listinfo/gnunet-svn

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

opensubscriber is not affiliated with the authors of this message nor responsible for its content.