blob: 51b120be86b3634764a8396fd36b2731fdd04ed9 [file] [log] [blame]
Guido van Rossum4f17e3e1995-03-16 15:07:38 +00001# Test the signal module
Barry Warsaw5e056bb1996-12-23 23:39:42 +00002from test_support import verbose
Guido van Rossum4f17e3e1995-03-16 15:07:38 +00003import signal
4import os
Guido van Rossumcc5a91d1997-04-16 00:29:15 +00005import sys
6
7if sys.platform[:3] == 'win':
8 raise ImportError, "Can't test signal on Windows"
Guido van Rossum4f17e3e1995-03-16 15:07:38 +00009
10
Barry Warsaw5e056bb1996-12-23 23:39:42 +000011if verbose:
12 x = '-x'
13else:
14 x = '+x'
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000015pid = os.getpid()
16
17# Shell script that will send us asynchronous signals
18script = """
Barry Warsaw5e056bb1996-12-23 23:39:42 +000019 (
20 set %(x)s
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000021 sleep 2
22 kill -5 %(pid)d
23 sleep 2
24 kill -2 %(pid)d
25 sleep 2
26 kill -3 %(pid)d
Barry Warsaw5e056bb1996-12-23 23:39:42 +000027 ) &
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000028""" % vars()
29
30def handlerA(*args):
Barry Warsaw5e056bb1996-12-23 23:39:42 +000031 if verbose:
32 print "handlerA", args
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000033
34HandlerBCalled = "HandlerBCalled" # Exception
35
36def handlerB(*args):
Barry Warsaw5e056bb1996-12-23 23:39:42 +000037 if verbose:
38 print "handlerB", args
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000039 raise HandlerBCalled, args
40
41signal.alarm(20) # Entire test lasts at most 20 sec.
42signal.signal(5, handlerA)
43signal.signal(2, handlerB)
44signal.signal(3, signal.SIG_IGN)
45signal.signal(signal.SIGALRM, signal.default_int_handler)
46
47os.system(script)
48
49print "starting pause() loop..."
50
51try:
52 while 1:
Barry Warsaw5e056bb1996-12-23 23:39:42 +000053 if verbose:
54 print "call pause()..."
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000055 try:
56 signal.pause()
Barry Warsaw5e056bb1996-12-23 23:39:42 +000057 if verbose:
58 print "pause() returned"
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000059 except HandlerBCalled:
Barry Warsaw5e056bb1996-12-23 23:39:42 +000060 if verbose:
61 print "HandlerBCalled exception caught"
62 else:
63 pass
64
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000065except KeyboardInterrupt:
Barry Warsaw5e056bb1996-12-23 23:39:42 +000066 if verbose:
67 print "KeyboardInterrupt (assume the alarm() went off)"