aos/tools/harness/subprocess_timeout.py
Daniel Schwyn 6d444bf552 Main handout
Signed-off-by: Daniel Schwyn <daniel.schwyn@inf.ethz.ch>
2022-03-03 14:57:51 +01:00

35 lines
1.1 KiB
Python

##########################################################################
# Copyright (c) 2009-2016 ETH Zurich.
# All rights reserved.
#
# This file is distributed under the terms in the attached LICENSE file.
# If you do not find this file, copies can be found by writing to:
# ETH Zurich D-INFK, Universitaetstr 6, CH-8092 Zurich. Attn: Systems Group.
##########################################################################
from threading import Timer
# Wait for Popen instance p for timeout seconds and terminate/kill it after
# the timeout expires
# Adapted from
# http://stackoverflow.com/questions/1191374/using-module-subprocess-with-timeout
def wait_or_terminate(p, timeout=5):
# Kill process if terminate doesn't exit in 1 second
def cleanup(x):
k = lambda y: y.kill()
timer2 = Timer(1, k, [x])
try:
timer2.start()
x.terminate()
finally:
timer2.cancel()
# Termiate process if it doesn't voluntarily exit in `timeout` seconds
timer = Timer(timeout, cleanup, [p])
try:
timer.start()
p.wait()
finally:
timer.cancel()