\section{Built-in Module \sectcode{signal}}

\bimodindex{signal}
This module provides mechanisms to use signal handlers in Python.
Some general rules for working with signals handlers:

\begin{itemize}

\item
A handler for a particular signal, once set, remains installed until
it is explicitly reset (i.e. Python emulates the BSD style interface
regardless of the underlying implementation), with the exception of
the handler for \code{SIGCHLD}, which follows the underlying
implementation.

\item
There is no way to ``block'' signals temporarily from critical
sections (since this is not supported by all \UNIX{} flavors).

\item
Although Python signal handlers are called asynchronously as far as
the Python user is concerned, they can only occur between the
``atomic'' instructions of the Python interpreter.  This means that
signals arriving during long calculations implemented purely in C
(e.g.\ regular expression matches on large bodies of text) may be
delayed for an arbitrary amount of time.

\item
When a signal arrives during an I/O operation, it is possible that the
I/O operation raises an exception after the signal handler returns.
This is dependent on the underlying \UNIX{} system's semantics regarding
interrupted system calls.

\item
Because the C signal handler always returns, it makes little sense to
catch synchronous errors like \code{SIGFPE} or \code{SIGSEGV}.

\item
Python installs a small number of signal handlers by default:
\code{SIGPIPE} is ignored (so write errors on pipes and sockets can be
reported as ordinary Python exceptions), \code{SIGINT} is translated
into a \code{KeyboardInterrupt} exception, and \code{SIGTERM} is
caught so that necessary cleanup (especially \code{sys.exitfunc}) can
be performed before actually terminating.  All of these can be
overridden.

\item
Some care must be taken if both signals and threads are used in the
same program.  The fundamental thing to remember in using signals and
threads simultaneously is:\ always perform \code{signal()} operations
in the main thread of execution.  Any thread can perform an
\code{alarm()}, \code{getsignal()}, or \code{pause()}; only the main
thread can set a new signal handler, and the main thread will be the
only one to receive signals (this is enforced by the Python signal
module, even if the underlying thread implementation supports sending
signals to individual threads).  This means that signals can't be used
as a means of interthread communication.  Use locks instead.

\end{itemize}

The variables defined in the signal module are:

\renewcommand{\indexsubitem}{(in module signal)}
\begin{datadesc}{SIG_DFL}
  This is one of two standard signal handling options; it will simply
  perform the default function for the signal.  For example, on most
  systems the default action for SIGQUIT is to dump core and exit,
  while the default action for SIGCLD is to simply ignore it.
\end{datadesc}

\begin{datadesc}{SIG_IGN}
  This is another standard signal handler, which will simply ignore
  the given signal.
\end{datadesc}

\begin{datadesc}{SIG*}
  All the signal numbers are defined symbolically.  For example, the
  hangup signal is defined as \code{signal.SIGHUP}; the variable names
  are identical to the names used in C programs, as found in
  \file{signal.h}.
  The \UNIX{} man page for \file{signal} lists the existing signals (on
  some systems this is \file{signal(2)}, on others the list is in
  \file{signal(7)}).
  Note that not all systems define the same set of signal names; only
  those names defined by the system are defined by this module.
\end{datadesc}

\begin{datadesc}{NSIG}
  One more than the number of the highest signal number.
\end{datadesc}

The signal module defines the following functions:

\begin{funcdesc}{alarm}{time}
  If \var{time} is non-zero, this function requests that a
  \code{SIGALRM} signal be sent to the process in \var{time} seconds.
  Any previously scheduled alarm is canceled (i.e.\ only one alarm can
  be scheduled at any time).  The returned value is then the number of
  seconds before any previously set alarm was to have been delivered.
  If \var{time} is zero, no alarm id scheduled, and any scheduled
  alarm is canceled.  The return value is the number of seconds
  remaining before a previously scheduled alarm.  If the return value
  is zero, no alarm is currently scheduled.  (See the \UNIX{} man page
  \code{alarm(2)}.)
\end{funcdesc}

\begin{funcdesc}{getsignal}{signalnum}
  Return the current signal handler for the signal \var{signalnum}.
  The returned value may be a callable Python object, or one of the
  special values \code{signal.SIG_IGN}, \code{signal.SIG_DFL} or
  \code{None}.  Here, \code{signal.SIG_IGN} means that the signal was
  previously ignored, \code{signal.SIG_DFL} means that the default way
  of handling the signal was previously in use, and \code{None} means
  that the previous signal handler was not installed from Python.
\end{funcdesc}

\begin{funcdesc}{pause}{}
  Cause the process to sleep until a signal is received; the
  appropriate handler will then be called.  Returns nothing.  (See the
  \UNIX{} man page \code{signal(2)}.)
\end{funcdesc}

\begin{funcdesc}{signal}{signalnum\, handler}
  Set the handler for signal \var{signalnum} to the function
  \var{handler}.  \var{handler} can be any callable Python object, or
  one of the special values \code{signal.SIG_IGN} or
  \code{signal.SIG_DFL}.  The previous signal handler will be returned
  (see the description of \code{getsignal()} above).  (See the \UNIX{}
  man page \code{signal(2)}.)

  When threads are enabled, this function can only be called from the
  main thread; attempting to call it from other threads will cause a
  \code{ValueError} exception to be raised.

  The \var{handler} is called with two arguments: the signal number
  and the current stack frame (\code{None} or a frame object; see the
  reference manual for a description of frame objects).
\obindex{frame}
\end{funcdesc}
