Catching signals in secondary threads

Pier Paolo Glave pierpaolo.glave at ciaolab.com
Wed Aug 28 04:55:32 EDT 2002


Hi everybody,

I'm trying without success to catch a SIGABRT signal in a Python
thread.

I'm running Python 2.2 over Linux (Red Hat 7.2).
In this environment, I see each thread as a separate Linux process,
with its own process id.

I know that the call to signal.signal() should be done only in the
main thread, and this should propagate the signal handling to the
children threads, too.

I tried with the following code:

-------starting code sample------------
import signal
import os
import sys
import time
import threading

def sigAbrtHandler(signo, stackframe):
    """Trapping SIGABRT (possibly coming from Tcl/Tk)
    """
    print 'Trapped SIGABRT!!!'

def testThread():
    print 'Signal handler (secondary) =',
signal.getsignal(signal.SIGABRT)
    while (1):
        time.sleep(5.0)
        print 'Secondary thread is alive', os.getpid()

# Trapping SIGABRT
signal.signal(signal.SIGABRT, sigAbrtHandler)

thr = threading.Thread(target=testThread)
thr.start()

print 'Signal handler (main) =', signal.getsignal(signal.SIGABRT)

while (1):
    time.sleep(5.0)
    print 'Main thread is alive', os.getpid()
-------end of code sample------------
If I kill the main thread with signal 6 (SIGABRT), the message 
'Trapped SIGABRT!!!' is printed out, but not when I send the signal to
the PID of the secondary thread.

Any suggestion for this problem?

Thank you
--
Pier Paolo Glave



More information about the Python-list mailing list