blob: 2d33635a7d48009dcdf2dc25e94b3e3fbd76b7d0 [file] [log] [blame]
Guido van Rossum5c971671996-07-22 15:23:25 +00001# Test the signal module
Guido van Rossum228b8e81997-04-02 06:13:34 +00002from test_support import verbose
Guido van Rossum5c971671996-07-22 15:23:25 +00003import signal
4import os
Guido van Rossumde554ec1997-05-08 23:14:57 +00005import sys
6
Guido van Rossum0b233481997-11-26 15:44:34 +00007if sys.platform[:3] in ('win', 'os2'):
8 raise ImportError, "Can't test signal on %s" % sys.platform[:3]
Guido van Rossum5c971671996-07-22 15:23:25 +00009
Guido van Rossum228b8e81997-04-02 06:13:34 +000010if verbose:
11 x = '-x'
12else:
13 x = '+x'
Guido van Rossum5c971671996-07-22 15:23:25 +000014pid = os.getpid()
15
16# Shell script that will send us asynchronous signals
17script = """
Guido van Rossum228b8e81997-04-02 06:13:34 +000018 (
19 set %(x)s
Guido van Rossum5c971671996-07-22 15:23:25 +000020 sleep 2
21 kill -5 %(pid)d
22 sleep 2
23 kill -2 %(pid)d
24 sleep 2
25 kill -3 %(pid)d
Guido van Rossum228b8e81997-04-02 06:13:34 +000026 ) &
Guido van Rossum5c971671996-07-22 15:23:25 +000027""" % vars()
28
29def handlerA(*args):
Guido van Rossum228b8e81997-04-02 06:13:34 +000030 if verbose:
31 print "handlerA", args
Guido van Rossum5c971671996-07-22 15:23:25 +000032
33HandlerBCalled = "HandlerBCalled" # Exception
34
35def handlerB(*args):
Guido van Rossum228b8e81997-04-02 06:13:34 +000036 if verbose:
37 print "handlerB", args
Guido van Rossum5c971671996-07-22 15:23:25 +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:
Guido van Rossum228b8e81997-04-02 06:13:34 +000052 if verbose:
53 print "call pause()..."
Guido van Rossum5c971671996-07-22 15:23:25 +000054 try:
55 signal.pause()
Guido van Rossum228b8e81997-04-02 06:13:34 +000056 if verbose:
57 print "pause() returned"
Guido van Rossum5c971671996-07-22 15:23:25 +000058 except HandlerBCalled:
Guido van Rossum228b8e81997-04-02 06:13:34 +000059 if verbose:
60 print "HandlerBCalled exception caught"
61 else:
62 pass
63
Guido van Rossum5c971671996-07-22 15:23:25 +000064except KeyboardInterrupt:
Guido van Rossum228b8e81997-04-02 06:13:34 +000065 if verbose:
66 print "KeyboardInterrupt (assume the alarm() went off)"