1 # Test the signal module
2 from test
.test_support
import verbose
, TestSkipped
, TestFailed
6 if sys
.platform
[:3] in ('win', 'os2') or sys
.platform
=='riscos':
7 raise TestSkipped
, "Can't test signal on %s" % sys
.platform
15 # Shell script that will send us asynchronous signals
30 print "handlerA", args
32 HandlerBCalled
= "HandlerBCalled" # Exception
36 print "handlerB", args
37 raise HandlerBCalled
, args
39 signal
.alarm(20) # Entire test lasts at most 20 sec.
40 signal
.signal(5, handlerA
)
41 signal
.signal(2, handlerB
)
42 signal
.signal(3, signal
.SIG_IGN
)
43 signal
.signal(signal
.SIGALRM
, signal
.default_int_handler
)
47 print "starting pause() loop..."
52 print "call pause()..."
56 print "pause() returned"
57 except HandlerBCalled
:
59 print "HandlerBCalled exception caught"
63 except KeyboardInterrupt:
65 print "KeyboardInterrupt (assume the alarm() went off)"
68 if hasattr(signal
, "sigprocmask"):
69 class HupDelivered(Exception):
71 def hup(signum
, frame
):
73 def hup2(signum
, frame
):
74 signal
.signal(signal
.SIGHUP
, hup
)
76 signal
.signal(signal
.SIGHUP
, hup
)
79 print "blocking SIGHUP"
81 defaultmask
= signal
.sigprocmask(signal
.SIG_BLOCK
, [signal
.SIGHUP
])
84 print "sending SIGHUP"
87 os
.kill(pid
, signal
.SIGHUP
)
89 raise TestFailed
, "HUP not blocked"
91 if signal
.SIGHUP
not in signal
.sigpending():
92 raise TestFailed
, "HUP not pending"
95 print "unblocking SIGHUP"
98 signal
.sigprocmask(signal
.SIG_UNBLOCK
, [signal
.SIGHUP
])
102 raise TestFailed
, "HUP not delivered"
105 print "testing sigsuspend"
107 signal
.sigprocmask(signal
.SIG_BLOCK
, [signal
.SIGHUP
])
108 signal
.signal(signal
.SIGHUP
, hup2
)
112 os
.kill(pid
, signal
.SIGHUP
)
114 os
.kill(pid
, signal
.SIGHUP
)
118 signal
.sigsuspend(defaultmask
)
120 raise TestFailed
, "sigsuspend erroneously raised"
123 signal
.sigsuspend(defaultmask
)
127 raise TestFailed
, "sigsupsend didn't raise"