blob: 94ad536ab3ea783fdd1db4f46e5daa8cb609dff8 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{signal} ---
2 Set handlers for asynchronous events.}
Fred Drakeb91e9341998-07-23 17:59:49 +00003\declaremodule{builtin}{signal}
Guido van Rossum626c1e71995-02-07 14:37:02 +00004
Fred Drakeb91e9341998-07-23 17:59:49 +00005
6\modulesynopsis{Set handlers for asynchronous events.}
7
Guido van Rossume1ff7ad1995-02-15 15:52:32 +00008This module provides mechanisms to use signal handlers in Python.
Andrew M. Kuchling42db27f1998-08-18 19:38:54 +00009Some general rules for working with signals and their handlers:
Guido van Rossum626c1e71995-02-07 14:37:02 +000010
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000011\begin{itemize}
12
13\item
14A handler for a particular signal, once set, remains installed until
Guido van Rossumc1715521996-02-12 23:18:51 +000015it is explicitly reset (i.e. Python emulates the BSD style interface
16regardless of the underlying implementation), with the exception of
Fred Drake55f44921998-01-22 15:56:41 +000017the handler for \constant{SIGCHLD}, which follows the underlying
Guido van Rossumc1715521996-02-12 23:18:51 +000018implementation.
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000019
20\item
21There is no way to ``block'' signals temporarily from critical
Guido van Rossum6bb1adc1995-03-13 10:03:32 +000022sections (since this is not supported by all \UNIX{} flavors).
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000023
24\item
25Although Python signal handlers are called asynchronously as far as
26the Python user is concerned, they can only occur between the
27``atomic'' instructions of the Python interpreter. This means that
Fred Drake55f44921998-01-22 15:56:41 +000028signals arriving during long calculations implemented purely in \C{}
Guido van Rossum6bb1adc1995-03-13 10:03:32 +000029(e.g.\ regular expression matches on large bodies of text) may be
Guido van Rossum470be141995-03-17 16:07:09 +000030delayed for an arbitrary amount of time.
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000031
32\item
33When a signal arrives during an I/O operation, it is possible that the
34I/O operation raises an exception after the signal handler returns.
Guido van Rossum6bb1adc1995-03-13 10:03:32 +000035This is dependent on the underlying \UNIX{} system's semantics regarding
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000036interrupted system calls.
37
38\item
Fred Drake55f44921998-01-22 15:56:41 +000039Because the \C{} signal handler always returns, it makes little sense to
40catch synchronous errors like \constant{SIGFPE} or \constant{SIGSEGV}.
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000041
42\item
43Python installs a small number of signal handlers by default:
Fred Drake55f44921998-01-22 15:56:41 +000044\constant{SIGPIPE} is ignored (so write errors on pipes and sockets can be
45reported as ordinary Python exceptions), \constant{SIGINT} is translated
46into a \exception{KeyboardInterrupt} exception, and \constant{SIGTERM} is
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000047caught so that necessary cleanup (especially \code{sys.exitfunc}) can
48be performed before actually terminating. All of these can be
49overridden.
50
51\item
52Some care must be taken if both signals and threads are used in the
53same program. The fundamental thing to remember in using signals and
Fred Drake55f44921998-01-22 15:56:41 +000054threads simultaneously is:\ always perform \function{signal()} operations
Guido van Rossum6bb1adc1995-03-13 10:03:32 +000055in the main thread of execution. Any thread can perform an
Fred Drake55f44921998-01-22 15:56:41 +000056\function{alarm()}, \function{getsignal()}, or \function{pause()};
57only the main thread can set a new signal handler, and the main thread
58will be the only one to receive signals (this is enforced by the
59Python \module{signal} module, even if the underlying thread
60implementation supports sending signals to individual threads). This
61means that signals can't be used as a means of interthread
62communication. Use locks instead.
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000063
64\end{itemize}
Guido van Rossum626c1e71995-02-07 14:37:02 +000065
Fred Drake55f44921998-01-22 15:56:41 +000066The variables defined in the \module{signal} module are:
Guido van Rossum626c1e71995-02-07 14:37:02 +000067
Guido van Rossum626c1e71995-02-07 14:37:02 +000068\begin{datadesc}{SIG_DFL}
69 This is one of two standard signal handling options; it will simply
70 perform the default function for the signal. For example, on most
Fred Drake55f44921998-01-22 15:56:41 +000071 systems the default action for \constant{SIGQUIT} is to dump core
72 and exit, while the default action for \constant{SIGCLD} is to
73 simply ignore it.
Guido van Rossum626c1e71995-02-07 14:37:02 +000074\end{datadesc}
75
76\begin{datadesc}{SIG_IGN}
77 This is another standard signal handler, which will simply ignore
78 the given signal.
79\end{datadesc}
80
81\begin{datadesc}{SIG*}
82 All the signal numbers are defined symbolically. For example, the
Fred Drake55f44921998-01-22 15:56:41 +000083 hangup signal is defined as \constant{signal.SIGHUP}; the variable names
Guido van Rossum626c1e71995-02-07 14:37:02 +000084 are identical to the names used in C programs, as found in
Fred Drakea5aefba1998-08-14 17:05:17 +000085 \code{<signal.h>}.
Fred Drake55f44921998-01-22 15:56:41 +000086 The \UNIX{} man page for `\cfunction{signal()}' lists the existing
87 signals (on some systems this is \manpage{signal}{2}, on others the
88 list is in \manpage{signal}{7}).
Guido van Rossum626c1e71995-02-07 14:37:02 +000089 Note that not all systems define the same set of signal names; only
90 those names defined by the system are defined by this module.
91\end{datadesc}
92
Guido van Rossume1ff7ad1995-02-15 15:52:32 +000093\begin{datadesc}{NSIG}
94 One more than the number of the highest signal number.
95\end{datadesc}
96
Fred Drake55f44921998-01-22 15:56:41 +000097The \module{signal} module defines the following functions:
Guido van Rossum626c1e71995-02-07 14:37:02 +000098
99\begin{funcdesc}{alarm}{time}
100 If \var{time} is non-zero, this function requests that a
Fred Drake55f44921998-01-22 15:56:41 +0000101 \constant{SIGALRM} signal be sent to the process in \var{time} seconds.
Guido van Rossum6bb1adc1995-03-13 10:03:32 +0000102 Any previously scheduled alarm is canceled (i.e.\ only one alarm can
Guido van Rossum626c1e71995-02-07 14:37:02 +0000103 be scheduled at any time). The returned value is then the number of
104 seconds before any previously set alarm was to have been delivered.
105 If \var{time} is zero, no alarm id scheduled, and any scheduled
106 alarm is canceled. The return value is the number of seconds
107 remaining before a previously scheduled alarm. If the return value
Guido van Rossum6bb1adc1995-03-13 10:03:32 +0000108 is zero, no alarm is currently scheduled. (See the \UNIX{} man page
Fred Drake55f44921998-01-22 15:56:41 +0000109 \manpage{alarm}{2}.)
Guido van Rossum626c1e71995-02-07 14:37:02 +0000110\end{funcdesc}
111
112\begin{funcdesc}{getsignal}{signalnum}
Guido van Rossum6bb1adc1995-03-13 10:03:32 +0000113 Return the current signal handler for the signal \var{signalnum}.
Guido van Rossum626c1e71995-02-07 14:37:02 +0000114 The returned value may be a callable Python object, or one of the
Fred Drake55f44921998-01-22 15:56:41 +0000115 special values \constant{signal.SIG_IGN}, \constant{signal.SIG_DFL} or
116 \constant{None}. Here, \constant{signal.SIG_IGN} means that the
117 signal was previously ignored, \constant{signal.SIG_DFL} means that the
118 default way of handling the signal was previously in use, and
119 \code{None} means that the previous signal handler was not installed
120 from Python.
Guido van Rossum626c1e71995-02-07 14:37:02 +0000121\end{funcdesc}
122
123\begin{funcdesc}{pause}{}
Guido van Rossum6bb1adc1995-03-13 10:03:32 +0000124 Cause the process to sleep until a signal is received; the
Guido van Rossum626c1e71995-02-07 14:37:02 +0000125 appropriate handler will then be called. Returns nothing. (See the
Fred Drake55f44921998-01-22 15:56:41 +0000126 \UNIX{} man page \manpage{signal}{2}.)
Guido van Rossum626c1e71995-02-07 14:37:02 +0000127\end{funcdesc}
128
Fred Drakecce10901998-03-17 06:33:25 +0000129\begin{funcdesc}{signal}{signalnum, handler}
Guido van Rossum6bb1adc1995-03-13 10:03:32 +0000130 Set the handler for signal \var{signalnum} to the function
Guido van Rossum52481481998-06-09 15:42:25 +0000131 \var{handler}. \var{handler} can be a callable Python object
132 taking two arguments (see below), or
Fred Drake55f44921998-01-22 15:56:41 +0000133 one of the special values \constant{signal.SIG_IGN} or
134 \constant{signal.SIG_DFL}. The previous signal handler will be returned
135 (see the description of \function{getsignal()} above). (See the
136 \UNIX{} man page \manpage{signal}{2}.)
Guido van Rossum626c1e71995-02-07 14:37:02 +0000137
Guido van Rossume1ff7ad1995-02-15 15:52:32 +0000138 When threads are enabled, this function can only be called from the
Guido van Rossum626c1e71995-02-07 14:37:02 +0000139 main thread; attempting to call it from other threads will cause a
Fred Drake55f44921998-01-22 15:56:41 +0000140 \exception{ValueError} exception to be raised.
Guido van Rossum470be141995-03-17 16:07:09 +0000141
142 The \var{handler} is called with two arguments: the signal number
143 and the current stack frame (\code{None} or a frame object; see the
144 reference manual for a description of frame objects).
145\obindex{frame}
Guido van Rossum626c1e71995-02-07 14:37:02 +0000146\end{funcdesc}
Andrew M. Kuchling42db27f1998-08-18 19:38:54 +0000147
148\subsection{Example}
149\nodename{Signal Example}
150
151Here is a minimal example program. It uses the \function{alarm()}
152function to limit the time spent waiting to open a file; this is
153useful if the file is for a serial device that may not be turned on,
154which would normally cause the \function{os.open()} to hang
155indefinitely. The solution is to set a 5-second alarm before opening
156the file; if the operation takes too long, the alarm signal will be
157sent, and the handler raises an exception.
158
159\begin{verbatim}
160import signal, os, FCNTL
161
162def handler(signum, frame):
163 print 'Signal handler called with signal', signum
164 raise IOError, "Couldn't open device!"
165
166# Set the signal handler and a 5-second alarm
167signal.signal(signal.SIGALRM, handler)
168signal.alarm(5)
169
170# This open() may hang indefinitely
171fd = os.open('/dev/ttyS0', FCNTL.O_RDWR)
172
173signal.alarm(0) # Disable the alarm
174\end{verbatim}