signal and threading

~levon Levon.Ghazaryan at gmail.com
Mon Aug 25 09:37:12 EDT 2008


Hello group,

in following example, a signal handler is registered and a thread
started. if I call self.doSomethin() directly
the code works as I would expect. as i send a SIGINT shutdown is
called and the script terminates.

as soon as I call doSomething() in a thread the the SIGINT handler is
never called again and
i have to terminate the script with a SIGTERM or SIGKILL.

well, i would expect the handler to be called in both cases, am i
missing something?

by the way. calling os.kill(os.getpid(), signal.SIGINT) works as I
would expect, what
don't is kill -s SIGINT pid # where pid is the actual process id

the code:

class Runner(object):
    def __init__(self):
        print os.getpid()
        self.shd = False
        signal.signal(signal.SIGINT, self.shutdown)
        threading.Thread(target=self.doSomething).start()
        # the following works fine:
        #os.kill(os.getpid(), signal.SIGINT)

    def doSomething(self):
        while not self.shd:
            pass

    def shutdown(self, signo, frm):
        self.shd = True

if __name__ == '__main__':
    Runner()

~levon



More information about the Python-list mailing list