Re: unix signal() handeling...

Guido.van.Rossum@cwi.nl
Sat, 05 Jun 1993 00:03:08 +0200

> Has anyone created a set of routines to attach arbitrary signal
> handlers to signals from inside Python?
>
> What I would like to be able to do is catch signals inside python
> and then call python code to handle the signals.

I haven't heard of anyone trying it yet. Can you give an example of
how this would be useful?

In any case you would have to handle them in a similar way as the
KeyboardInterrupt exception is currently handled: the real (C) signal
handler only sets a flag that the signal has arrived, and then later
the interpreter checks this flag (possibly after each (virtual)
instruction -- currently it's done only every few instructions) and
invokes the code that handles the signal. I suppose you could set it
up so that if the handler returns the interpreter continues where it
left off, while if the handler raises an exception the interpreter
passes the exception on. KeyboardInterrupt could then be made a
special case of this.

Note that you won't be able to catch program bugs in the Python
interpreter this way (since they must be handled synchronously).

There is also the problem that not all wrappers around blocking system
calls (or blocking library calls) will will yield return when a signal
handler is called, so the Python signal handling may wait until the
call returns normally -- this is usually not what you want.

I'm sorry...

--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>