comparison win32.py @ 134:e84f33a60a5c

Moved process killing logic into platform-specific modules
author Oleg Oshmyan <chortos@inbox.lv>
date Fri, 20 May 2011 14:47:42 +0100
parents 7923faf392fe
children 388ae061c915
comparison
equal deleted inserted replaced
133:a9d2aa6810c7 134:e84f33a60a5c
45 __getnewargs__ = lambda self: tuple(self) 45 __getnewargs__ = lambda self: tuple(self)
46 kernel, user = (property(itemgetter(i)) for i in (0, 1)) 46 kernel, user = (property(itemgetter(i)) for i in (0, 1))
47 else: 47 else:
48 ProcessTimes = namedtuple('ProcessTimes', 'kernel user') 48 ProcessTimes = namedtuple('ProcessTimes', 'kernel user')
49 49
50 __all__ = 'call', 'kill', 'terminate', 'wait', 'pause', 'clock' 50 __all__ = 'call', 'kill', 'pause', 'clock'
51 51
52 52
53 from functools import wraps 53 from functools import wraps
54 pathext = [''] + os.environ['PATHEXT'].split(';') 54 pathext = [''] + os.environ['PATHEXT'].split(';')
55 @wraps(subprocess.Popen) 55 @wraps(subprocess.Popen)
85 # on the very first try, but syntax differences preclude me from 85 # on the very first try, but syntax differences preclude me from
86 # doing so in Python 2 and it can't be done at all in Python 3 86 # doing so in Python 2 and it can't be done at all in Python 3
87 raise 87 raise
88 88
89 89
90 # Automatically convert _subprocess handle objects into low-level HANDLEs 90 # Automatically convert _subprocess handle objects into low-level
91 # and replicate their functionality for our own use 91 # HANDLEs and replicate their functionality for our own use
92 try: 92 try:
93 _subprocess_handle = type(GetCurrentProcess()) 93 _subprocess_handle = type(GetCurrentProcess())
94 except NameError: 94 except NameError:
95 _subprocess_handle = Integral 95 _subprocess_handle = Integral
96 class Handle(object): 96 class Handle(object):
539 if counters.PeakPagefileUsage > case.maxmemory * 1048576: 539 if counters.PeakPagefileUsage > case.maxmemory * 1048576:
540 raise testcases.MemoryLimitExceeded 540 raise testcases.MemoryLimitExceeded
541 541
542 542
543 def kill(process): 543 def kill(process):
544 try: 544 # Give up after three attempts
545 process.terminate() 545 for i in range(3):
546 except AttributeError: 546 try:
547 TerminateProcess(process._handle, 1) 547 try:
548 terminate = kill 548 process.terminate()
549 wait = subprocess.Popen.wait 549 except AttributeError:
550 TerminateProcess(process._handle, 1)
551 except WindowsError:
552 time.sleep(0)
553 else:
554 break