[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r22624 - gnunet/contrib
From: |
gnunet |
Subject: |
[GNUnet-SVN] r22624 - gnunet/contrib |
Date: |
Thu, 12 Jul 2012 23:08:44 +0200 |
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 @@
address@hidden@
+# 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 ()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r22624 - gnunet/contrib,
gnunet <=