using filedescriptors in SIGINT signal handler

jepler at unpythonic.net jepler at unpythonic.net
Tue Sep 13 15:02:57 CEST 2005


If you're talking about a Python function registered as a handler by
signal.signal, then there should not be any restrictions on what you do
in that function.

Here's a small program I wrote:
#------------------------------------------------------------------------
import os, signal, time

def h(*args): os.write(fd, "data\n");

print "my pid is", os.getpid()
subproc = os.popen("cat -n", "w")
fd = subproc.fileno()
 
signal.signal(signal.SIGINT, h)

while 1:
    time.sleep(1)
#------------------------------------------------------------------------

I ran this and in another terminal I repeatedly typed 'kill -INT nnnn',
where nnnn is the pid printed by my program.  Each time, another line is
output by 'cat'.

When I try to deliver the signal by hitting ctrl-c in that terminal, the
first time nothing happens and the second time I get the message
	OSError: [Errno 32] Broken pipe
in this case, I believe that the first signal was delivered to cat,
causing it to exit.  The second signal was delivered to the python
program, which obviously couldn't write to the stdin of a process that
had exited.

Jeff
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20050913/364d6c43/attachment.pgp>


More information about the Python-list mailing list