blob: 2d33635a7d48009dcdf2dc25e94b3e3fbd76b7d0 [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
Guido van Rossum8e9ebfd1997-11-22 21:53:48 +00007if sys.platform[:3] in ('win', 'os2'):
8 raise ImportError, "Can't test signal on %s" % sys.platform[:3]
Guido van Rossum4f17e3e1995-03-16 15:07:38 +00009
Barry Warsaw5e056bb1996-12-23 23:39:42 +000010if verbose:
11 x = '-x'
12else:
13 x = '+x'
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000014pid = os.getpid()
15
16# Shell script that will send us asynchronous signals
17script = """
Barry Warsaw5e056bb1996-12-23 23:39:42 +000018 (
19 set %(x)s
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000020 sleep 2
21 kill -5 %(pid)d
22 sleep 2
23 kill -2 %(pid)d
24 sleep 2
25 kill -3 %(pid)d
Barry Warsaw5e056bb1996-12-23 23:39:42 +000026 ) &
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000027""" % vars()
28
29def handlerA(*args):
Barry Warsaw5e056bb1996-12-23 23:39:42 +000030 if verbose:
31 print "handlerA", args
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000032
33HandlerBCalled = "HandlerBCalled" # Exception
34
35def handlerB(*args):
Barry Warsaw5e056bb1996-12-23 23:39:42 +000036 if verbose:
37 print "handlerB", args
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000038 raise HandlerBCalled, args
39
40signal.alarm(20) # Entire test lasts at most 20 sec.
41signal.signal(5, handlerA)
42signal.signal(2, handlerB)
43signal.signal(3, signal.SIG_IGN)
44signal.signal(signal.SIGALRM, signal.default_int_handler)
45
46os.system(script)
47
48print "starting pause() loop..."
49
50try:
51 while 1:
Barry Warsaw5e056bb1996-12-23 23:39:42 +000052 if verbose:
53 print "call pause()..."
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000054 try:
55 signal.pause()
Barry Warsaw5e056bb1996-12-23 23:39:42 +000056 if verbose:
57 print "pause() returned"
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000058 except HandlerBCalled:
Barry Warsaw5e056bb1996-12-23 23:39:42 +000059 if verbose:
60 print "HandlerBCalled exception caught"
61 else:
62 pass
63
Guido van Rossum4f17e3e1995-03-16 15:07:38 +000064except KeyboardInterrupt:
Barry Warsaw5e056bb1996-12-23 23:39:42 +000065 if verbose:
66 print "KeyboardInterrupt (assume the alarm() went off)"