blob: 51b120be86b3634764a8396fd36b2731fdd04ed9 [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
7if sys.platform[:3] == 'win':
8 raise ImportError, "Can't test signal on Windows"
Guido van Rossum5c971671996-07-22 15:23:25 +00009
10
Guido van Rossum228b8e81997-04-02 06:13:34 +000011if verbose:
12 x = '-x'
13else:
14 x = '+x'
Guido van Rossum5c971671996-07-22 15:23:25 +000015pid = os.getpid()
16
17# Shell script that will send us asynchronous signals
18script = """
Guido van Rossum228b8e81997-04-02 06:13:34 +000019 (
20 set %(x)s
Guido van Rossum5c971671996-07-22 15:23:25 +000021 sleep 2
22 kill -5 %(pid)d
23 sleep 2
24 kill -2 %(pid)d
25 sleep 2
26 kill -3 %(pid)d
Guido van Rossum228b8e81997-04-02 06:13:34 +000027 ) &
Guido van Rossum5c971671996-07-22 15:23:25 +000028""" % vars()
29
30def handlerA(*args):
Guido van Rossum228b8e81997-04-02 06:13:34 +000031 if verbose:
32 print "handlerA", args
Guido van Rossum5c971671996-07-22 15:23:25 +000033
34HandlerBCalled = "HandlerBCalled" # Exception
35
36def handlerB(*args):
Guido van Rossum228b8e81997-04-02 06:13:34 +000037 if verbose:
38 print "handlerB", args
Guido van Rossum5c971671996-07-22 15:23:25 +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:
Guido van Rossum228b8e81997-04-02 06:13:34 +000053 if verbose:
54 print "call pause()..."
Guido van Rossum5c971671996-07-22 15:23:25 +000055 try:
56 signal.pause()
Guido van Rossum228b8e81997-04-02 06:13:34 +000057 if verbose:
58 print "pause() returned"
Guido van Rossum5c971671996-07-22 15:23:25 +000059 except HandlerBCalled:
Guido van Rossum228b8e81997-04-02 06:13:34 +000060 if verbose:
61 print "HandlerBCalled exception caught"
62 else:
63 pass
64
Guido van Rossum5c971671996-07-22 15:23:25 +000065except KeyboardInterrupt:
Guido van Rossum228b8e81997-04-02 06:13:34 +000066 if verbose:
67 print "KeyboardInterrupt (assume the alarm() went off)"