properly catch SIGTERM

Dieter Maurer dieter at
Fri Jul 20 08:09:38 CEST 2012

Eric Frederich <eric.frederich at> writes:
> ...
> This seems to work okay but just now I got this while hitting ctrl-c
> It seems to have caught the signal at or in the middle of a call to
> sys.stdout.flush()
> --- Caught SIGTERM; Attempting to quit gracefully ---
> Traceback (most recent call last):
>   File "/home/user/", line 125, in <module>
>     sys.stdout.flush()
> IOError: [Errno 4] Interrupted system call
> How should I fix this?

This is normal *nix behavior. Any signal, even if caught by a signal
handler, can interrupt system calls.

Modern *nix versions might allow to control whether a signal interrupts
a system call or not. Check the signal documentation for your operating
system for the control you have over signal handling. Likely,
you cannot directly control the feature via Python, but the
"ctypes" module allows you to call C functions directly.

More information about the Python-list mailing list