| # 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)" |