summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_signal.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
new file mode 100644
index 0000000..bfcf517
--- /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)"