import signal, os, sys from subprocess import Popen def callProgram(program, timeout): def handler(signum, frame): print "%s time out after %d" % (program, timeout) print pid os.kill(pid, signal.SIGKILL) sys.exit(1) signal.signal(signal.SIGALRM, handler) signal.alarm(timeout) p = Popen(program, shell=True, close_fds=True) pid = p.pid p.wait() signal.alarm(0) return p.returncode if __name__ == '__main__': callProgram("sleep 10", 5) me 8915 0.0 0.0 1712 484 ? S 16:39 0:00 /bin/sh -c sleep 10 me 8916 0.0 0.0 2800 624 ? S 16:39 0:00 sleep 10