| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | # Test the signal module | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | from test_support import verbose | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | import signal | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											1997-05-08 23:14:57 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-11-26 15:44:34 +00:00
										 |  |  | if sys.platform[:3] in ('win', 'os2'): | 
					
						
							|  |  |  |     raise ImportError, "Can't test signal on %s" % sys.platform[:3] | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | if verbose: | 
					
						
							|  |  |  | 	x = '-x' | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  | 	x = '+x' | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | pid = os.getpid() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Shell script that will send us asynchronous signals | 
					
						
							|  |  |  | script = """
 | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  |  ( | 
					
						
							|  |  |  | 	set %(x)s | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | 	sleep 2 | 
					
						
							|  |  |  | 	kill -5 %(pid)d | 
					
						
							|  |  |  | 	sleep 2 | 
					
						
							|  |  |  | 	kill -2 %(pid)d | 
					
						
							|  |  |  | 	sleep 2 | 
					
						
							|  |  |  | 	kill -3 %(pid)d | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  |  ) & | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | """ % vars()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def handlerA(*args): | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | 	if verbose: | 
					
						
							|  |  |  | 		print "handlerA", args | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | HandlerBCalled = "HandlerBCalled"	# Exception | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def handlerB(*args): | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | 	if verbose: | 
					
						
							|  |  |  | 		print "handlerB", args | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | 	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: | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | 		if verbose: | 
					
						
							|  |  |  | 			print "call pause()..." | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | 		try: | 
					
						
							|  |  |  | 			signal.pause() | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | 			if verbose: | 
					
						
							|  |  |  | 				print "pause() returned" | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | 		except HandlerBCalled: | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | 			if verbose: | 
					
						
							|  |  |  | 				print "HandlerBCalled exception caught" | 
					
						
							|  |  |  | 			else: | 
					
						
							|  |  |  | 				pass | 
					
						
							|  |  |  | 				 | 
					
						
							| 
									
										
										
										
											1996-07-22 15:23:25 +00:00
										 |  |  | except KeyboardInterrupt: | 
					
						
							| 
									
										
										
										
											1997-04-02 06:13:34 +00:00
										 |  |  | 	if verbose: | 
					
						
							|  |  |  | 		print "KeyboardInterrupt (assume the alarm() went off)" |