| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | # Test the signal module | 
					
						
							| 
									
										
										
										
											2002-07-23 19:04:11 +00:00
										 |  |  | from test.test_support import verbose, TestSkipped, TestFailed | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | import signal | 
					
						
							| 
									
										
										
										
											2002-05-27 15:08:24 +00:00
										 |  |  | import os, sys, time | 
					
						
							| 
									
										
										
										
											1997-04-16 00:29:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  | if sys.platform[:3] in ('win', 'os2') or sys.platform=='riscos': | 
					
						
							|  |  |  |     raise TestSkipped, "Can't test signal on %s" % sys.platform | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 23:39:42 +00:00
										 |  |  | if verbose: | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     x = '-x' | 
					
						
							| 
									
										
										
										
											1996-12-23 23:39:42 +00:00
										 |  |  | else: | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     x = '+x' | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | pid = os.getpid() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Shell script that will send us asynchronous signals | 
					
						
							|  |  |  | script = """
 | 
					
						
							| 
									
										
										
										
											1996-12-23 23:39:42 +00:00
										 |  |  |  ( | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |         set %(x)s | 
					
						
							|  |  |  |         sleep 2 | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  |         kill -HUP %(pid)d | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |         sleep 2 | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  |         kill -USR1 %(pid)d | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |         sleep 2 | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  |         kill -USR2 %(pid)d | 
					
						
							| 
									
										
										
										
											1996-12-23 23:39:42 +00:00
										 |  |  |  ) & | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | """ % vars()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def handlerA(*args): | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     if verbose: | 
					
						
							|  |  |  |         print "handlerA", args | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-07 21:27:43 +00:00
										 |  |  | class HandlerBCalled(Exception): | 
					
						
							|  |  |  |     pass | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def handlerB(*args): | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     if verbose: | 
					
						
							|  |  |  |         print "handlerB", args | 
					
						
							|  |  |  |     raise HandlerBCalled, args | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | signal.alarm(20)                        # Entire test lasts at most 20 sec. | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  | hup = signal.signal(signal.SIGHUP, handlerA) | 
					
						
							|  |  |  | usr1 = signal.signal(signal.SIGUSR1, handlerB) | 
					
						
							|  |  |  | usr2 = signal.signal(signal.SIGUSR2, signal.SIG_IGN) | 
					
						
							|  |  |  | alrm = signal.signal(signal.SIGALRM, signal.default_int_handler) | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  | try: | 
					
						
							|  |  |  |     os.system(script) | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  |     print "starting pause() loop..." | 
					
						
							| 
									
										
										
										
											1995-03-16 15:07:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  |     try: | 
					
						
							|  |  |  |         while 1: | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |             if verbose: | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  |                 print "call pause()..." | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 signal.pause() | 
					
						
							|  |  |  |                 if verbose: | 
					
						
							|  |  |  |                     print "pause() returned" | 
					
						
							|  |  |  |             except HandlerBCalled: | 
					
						
							|  |  |  |                 if verbose: | 
					
						
							|  |  |  |                     print "HandlerBCalled exception caught" | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     pass | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-11 18:09:28 +00:00
										 |  |  |     except KeyboardInterrupt: | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "KeyboardInterrupt (assume the alarm() went off)" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | finally: | 
					
						
							|  |  |  |     signal.signal(signal.SIGHUP, hup) | 
					
						
							|  |  |  |     signal.signal(signal.SIGUSR1, usr1) | 
					
						
							|  |  |  |     signal.signal(signal.SIGUSR2, usr2) | 
					
						
							|  |  |  |     signal.signal(signal.SIGALRM, alrm) |