diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index 694e3f0..55cd978 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -6,6 +6,8 @@
 if sys.platform[:3] in ('win', 'os2') or sys.platform=='riscos':
     raise TestSkipped, "Can't test signal on %s" % sys.platform
 
+MAX_DURATION = 20   # Entire test should last at most 20 sec.
+
 if verbose:
     x = '-x'
 else:
@@ -34,7 +36,7 @@
     global a_called
     a_called = True
     if verbose:
-        print "handlerA", args
+        print "handlerA invoked", args
 
 class HandlerBCalled(Exception):
     pass
@@ -43,97 +45,103 @@
     global b_called
     b_called = True
     if verbose:
-        print "handlerB", args
+        print "handlerB invoked", args
     raise HandlerBCalled, args
 
-MAX_DURATION = 20
-signal.alarm(MAX_DURATION)   # Entire test should last at most 20 sec.
+# Set up a child to send signals to us (the parent) after waiting long
+# enough to receive the alarm.  It seems we miss the alarm for some
+# reason.  This will hopefully stop the hangs on Tru64/Alpha.
+# Alas, it doesn't.  Tru64 appears to miss all the signals at times, or
+# seemingly random subsets of them, and nothing done in force_test_exit
+# so far has actually helped.
+def force_test_exit():
+    # Sigh, both imports seem necessary to avoid errors.
+    import os
+    fork_pid = os.fork()
+    if fork_pid:
+        # In parent.
+        return fork_pid
+
+    # In child.
+    import os, time
+    try:
+        # Wait 5 seconds longer than the expected alarm to give enough
+        # time for the normal sequence of events to occur.  This is
+        # just a stop-gap to try to prevent the test from hanging.
+        time.sleep(MAX_DURATION + 5)
+        print >> sys.__stdout__, '  child should not have to kill parent'
+        for signame in "SIGHUP", "SIGUSR1", "SIGUSR2", "SIGALRM":
+            os.kill(pid, getattr(signal, signame))
+            print >> sys.__stdout__, "    child sent", signame, "to", pid
+            time.sleep(1)
+    finally:
+        os._exit(0)
+
+# Install handlers.
 hup = signal.signal(signal.SIGHUP, handlerA)
 usr1 = signal.signal(signal.SIGUSR1, handlerB)
 usr2 = signal.signal(signal.SIGUSR2, signal.SIG_IGN)
 alrm = signal.signal(signal.SIGALRM, signal.default_int_handler)
 
-vereq(signal.getsignal(signal.SIGHUP), handlerA)
-vereq(signal.getsignal(signal.SIGUSR1), handlerB)
-vereq(signal.getsignal(signal.SIGUSR2), signal.SIG_IGN)
-
 try:
-    signal.signal(4242, handlerB)
-    raise TestFailed, 'expected ValueError for invalid signal # to signal()'
-except ValueError:
-    pass
 
-try:
-    signal.getsignal(4242)
-    raise TestFailed, 'expected ValueError for invalid signal # to getsignal()'
-except ValueError:
-    pass
-
-try:
-    signal.signal(signal.SIGUSR1, None)
-    raise TestFailed, 'expected TypeError for non-callable'
-except TypeError:
-    pass
-
-# Set up a child to send an alarm signal to us (the parent) after waiting
-# long enough to receive the alarm.  It seems we miss the alarm for some
-# reason.  This will hopefully stop the hangs on Tru64/Alpha.
-def force_test_exit():
-    # Sigh, both imports seem necessary to avoid errors.
-    import os
-    fork_pid = os.fork()
-    if fork_pid == 0:
-        # In child
-        import os, time
-        try:
-            # Wait 5 seconds longer than the expected alarm to give enough
-            # time for the normal sequence of events to occur.  This is
-            # just a stop-gap to prevent the test from hanging.
-            time.sleep(MAX_DURATION + 5)
-            print >> sys.__stdout__, '  child should not have to kill parent'
-            for i in range(3):
-                os.kill(pid, signal.SIGALRM)
-                print >> sys.__stdout__, "    child sent SIGALRM to", pid
-        finally:
-            os._exit(0)
-    # In parent (or error)
-    return fork_pid
-
-try:
-    os.system(script)
+    signal.alarm(MAX_DURATION)
+    vereq(signal.getsignal(signal.SIGHUP), handlerA)
+    vereq(signal.getsignal(signal.SIGUSR1), handlerB)
+    vereq(signal.getsignal(signal.SIGUSR2), signal.SIG_IGN)
+    vereq(signal.getsignal(signal.SIGALRM), signal.default_int_handler)
 
     # Try to ensure this test exits even if there is some problem with alarm.
-    # Tru64/Alpha sometimes hangs and is ultimately killed by the buildbot.
+    # Tru64/Alpha often hangs and is ultimately killed by the buildbot.
     fork_pid = force_test_exit()
-    print "starting pause() loop..."
 
     try:
+        signal.getsignal(4242)
+        raise TestFailed('expected ValueError for invalid signal # to '
+                         'getsignal()')
+    except ValueError:
+        pass
+
+    try:
+        signal.signal(4242, handlerB)
+        raise TestFailed('expected ValueError for invalid signal # to '
+                         'signal()')
+    except ValueError:
+        pass
+
+    try:
+        signal.signal(signal.SIGUSR1, None)
+        raise TestFailed('expected TypeError for non-callable')
+    except TypeError:
+        pass
+
+    # Launch an external script to send us signals.
+    # We expect the external script to:
+    #    send HUP, which invokes handlerA to set a_called
+    #    send USR1, which invokes handlerB to set b_called and raise
+    #               HandlerBCalled
+    #    send USR2, which is ignored
+    #
+    # Then we expect the alarm to go off, and its handler raises
+    # KeyboardInterrupt, finally getting us out of the loop.
+    os.system(script)
+    try:
+        if verbose:
+            print "starting pause() loop..."
         while 1:
-            if verbose:
-                print "call pause()..."
             try:
+                if verbose:
+                    print "call pause()..."
                 signal.pause()
                 if verbose:
                     print "pause() returned"
             except HandlerBCalled:
                 if verbose:
                     print "HandlerBCalled exception caught"
-                else:
-                    pass
 
     except KeyboardInterrupt:
         if verbose:
-            print "KeyboardInterrupt (assume the alarm() went off)"
-
-    # Forcibly kill the child we created to ping us if there was a test error.
-    try:
-        # Make sure we don't kill ourself if there was a fork error.
-        if fork_pid > 0:
-            os.kill(fork_pid, signal.SIGKILL)
-    except:
-        # If the child killed us, it has probably exited.  Killing a
-        # non-existant process will raise an error which we don't care about.
-        pass
+            print "KeyboardInterrupt (the alarm() went off)"
 
     if not a_called:
         print 'HandlerA not called'
@@ -142,6 +150,18 @@
         print 'HandlerB not called'
 
 finally:
+    # Forcibly kill the child we created to ping us if there was a test error.
+    try:
+        # Make sure we don't kill ourself if there was a fork error.
+        if fork_pid > 0:
+            os.kill(fork_pid, signal.SIGKILL)
+    except:
+        # If the child killed us, it has probably exited.  Killing a
+        # non-existent process will raise an error which we don't care about.
+        pass
+
+    # Restore handlers.
+    signal.alarm(0) # cancel alarm in case we died early
     signal.signal(signal.SIGHUP, hup)
     signal.signal(signal.SIGUSR1, usr1)
     signal.signal(signal.SIGUSR2, usr2)
diff --git a/Lib/test/test_threadsignals.py b/Lib/test/test_threadsignals.py
index 51e3d97..1f10fe7 100644
--- a/Lib/test/test_threadsignals.py
+++ b/Lib/test/test_threadsignals.py
@@ -49,7 +49,7 @@
         # and might be out of order.)  If we haven't seen
         # the signals yet, send yet another signal and
         # wait for it return.
-        if signal_blackboard[signal.SIGUSR2]['tripped'] == 0 \
+        if signal_blackboard[signal.SIGUSR1]['tripped'] == 0 \
            or signal_blackboard[signal.SIGUSR2]['tripped'] == 0:
             signal.alarm(1)
             signal.pause()
