diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py new file mode 100644 index 00000000000..bfcf517ac9a --- /dev/null +++ b/Lib/test/test_signal.py @@ -0,0 +1,50 @@ +# Test the signal module + +import signal +import os + + +pid = os.getpid() + +# Shell script that will send us asynchronous signals +script = """ +( + set -x + sleep 2 + kill -5 %(pid)d + sleep 2 + kill -2 %(pid)d + sleep 2 + kill -3 %(pid)d +) & +""" % vars() + +def handlerA(*args): + print "handlerA", args + +HandlerBCalled = "HandlerBCalled" # Exception + +def handlerB(*args): + print "handlerB", args + raise HandlerBCalled, args + +signal.alarm(20) # Entire test lasts at most 20 sec. +signal.signal(5, handlerA) +signal.signal(2, handlerB) +signal.signal(3, signal.SIG_IGN) +signal.signal(signal.SIGALRM, signal.default_int_handler) + +os.system(script) + +print "starting pause() loop..." + +try: + while 1: + print "call pause()..." + try: + signal.pause() + print "pause() returned" + except HandlerBCalled: + print "HandlerBCalled exception caught" +except KeyboardInterrupt: + print "KeyboardInterrupt (assume the alarm() went off)"