blob: 84e283683d07fcd1cf3c214a9284fee3cd05e28f [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`signal` --- Set handlers for asynchronous events
2======================================================
3
4.. module:: signal
5 :synopsis: Set handlers for asynchronous events.
6
7
Antoine Pitrou6afd11c2012-03-31 20:56:21 +02008This module provides mechanisms to use signal handlers in Python.
Georg Brandl116aa622007-08-15 14:28:22 +00009
Georg Brandl116aa622007-08-15 14:28:22 +000010
Antoine Pitrou6afd11c2012-03-31 20:56:21 +020011General rules
12-------------
Georg Brandl116aa622007-08-15 14:28:22 +000013
Antoine Pitrou6afd11c2012-03-31 20:56:21 +020014The :func:`signal.signal` function allows to define custom handlers to be
15executed when a signal is received. A small number of default handlers are
16installed: :const:`SIGPIPE` is ignored (so write errors on pipes and sockets
17can be reported as ordinary Python exceptions) and :const:`SIGINT` is
18translated into a :exc:`KeyboardInterrupt` exception.
Georg Brandl116aa622007-08-15 14:28:22 +000019
Antoine Pitrou6afd11c2012-03-31 20:56:21 +020020A handler for a particular signal, once set, remains installed until it is
21explicitly reset (Python emulates the BSD style interface regardless of the
22underlying implementation), with the exception of the handler for
23:const:`SIGCHLD`, which follows the underlying implementation.
Georg Brandl116aa622007-08-15 14:28:22 +000024
Antoine Pitrou6afd11c2012-03-31 20:56:21 +020025There is no way to "block" signals temporarily from critical sections (since
26this is not supported by all Unix flavors).
Georg Brandl116aa622007-08-15 14:28:22 +000027
Georg Brandl116aa622007-08-15 14:28:22 +000028
Antoine Pitrou6afd11c2012-03-31 20:56:21 +020029Execution of Python signal handlers
30^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
31
32A Python signal handler does not get executed inside the low-level (C) signal
33handler. Instead, the low-level signal handler sets a flag which tells the
34:term:`virtual machine` to execute the corresponding Python signal handler
35at a later point(for example at the next :term:`bytecode` instruction).
36This has consequences:
37
38* It makes little sense to catch synchronous errors like :const:`SIGFPE` or
Georg Brandlc377fe22013-10-06 21:22:42 +020039 :const:`SIGSEGV` that are caused by an invalid operation in C code. Python
40 will return from the signal handler to the C code, which is likely to raise
41 the same signal again, causing Python to apparently hang. From Python 3.3
42 onwards, you can use the :mod:`faulthandler` module to report on synchronous
43 errors.
Antoine Pitrou6afd11c2012-03-31 20:56:21 +020044
45* A long-running calculation implemented purely in C (such as regular
46 expression matching on a large body of text) may run uninterrupted for an
47 arbitrary amount of time, regardless of any signals received. The Python
48 signal handlers will be called when the calculation finishes.
49
50
Antoine Pitrou682d4432012-03-31 21:09:00 +020051.. _signals-and-threads:
52
53
Antoine Pitrou6afd11c2012-03-31 20:56:21 +020054Signals and threads
55^^^^^^^^^^^^^^^^^^^
56
57Python signal handlers are always executed in the main Python thread,
58even if the signal was received in another thread. This means that signals
59can't be used as a means of inter-thread communication. You can use
60the synchronization primitives from the :mod:`threading` module instead.
61
62Besides, only the main thread is allowed to set a new signal handler.
63
64
65Module contents
66---------------
Georg Brandl116aa622007-08-15 14:28:22 +000067
68The variables defined in the :mod:`signal` module are:
69
70
71.. data:: SIG_DFL
72
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +000073 This is one of two standard signal handling options; it will simply perform
74 the default function for the signal. For example, on most systems the
75 default action for :const:`SIGQUIT` is to dump core and exit, while the
76 default action for :const:`SIGCHLD` is to simply ignore it.
Georg Brandl116aa622007-08-15 14:28:22 +000077
78
79.. data:: SIG_IGN
80
81 This is another standard signal handler, which will simply ignore the given
82 signal.
83
84
85.. data:: SIG*
86
87 All the signal numbers are defined symbolically. For example, the hangup signal
88 is defined as :const:`signal.SIGHUP`; the variable names are identical to the
89 names used in C programs, as found in ``<signal.h>``. The Unix man page for
Georg Brandl60203b42010-10-06 10:11:56 +000090 ':c:func:`signal`' lists the existing signals (on some systems this is
Georg Brandl116aa622007-08-15 14:28:22 +000091 :manpage:`signal(2)`, on others the list is in :manpage:`signal(7)`). Note that
92 not all systems define the same set of signal names; only those names defined by
93 the system are defined by this module.
94
95
Brian Curtineb24d742010-04-12 17:16:38 +000096.. data:: CTRL_C_EVENT
97
Brian Curtinf045d772010-08-05 18:56:00 +000098 The signal corresponding to the CTRL+C keystroke event. This signal can
99 only be used with :func:`os.kill`.
100
Brian Curtineb24d742010-04-12 17:16:38 +0000101 Availability: Windows.
102
Brian Curtin904bd392010-04-20 15:28:06 +0000103 .. versionadded:: 3.2
104
Brian Curtineb24d742010-04-12 17:16:38 +0000105
106.. data:: CTRL_BREAK_EVENT
107
Brian Curtinf045d772010-08-05 18:56:00 +0000108 The signal corresponding to the CTRL+BREAK keystroke event. This signal can
109 only be used with :func:`os.kill`.
110
Brian Curtineb24d742010-04-12 17:16:38 +0000111 Availability: Windows.
112
Brian Curtin904bd392010-04-20 15:28:06 +0000113 .. versionadded:: 3.2
114
Brian Curtineb24d742010-04-12 17:16:38 +0000115
Georg Brandl116aa622007-08-15 14:28:22 +0000116.. data:: NSIG
117
118 One more than the number of the highest signal number.
119
Martin v. Löwis823725e2008-03-24 13:39:54 +0000120
Georg Brandl48310cd2009-01-03 21:18:54 +0000121.. data:: ITIMER_REAL
Martin v. Löwis823725e2008-03-24 13:39:54 +0000122
Georg Brandl18244152009-09-02 20:34:52 +0000123 Decrements interval timer in real time, and delivers :const:`SIGALRM` upon
124 expiration.
Martin v. Löwis823725e2008-03-24 13:39:54 +0000125
126
Georg Brandl48310cd2009-01-03 21:18:54 +0000127.. data:: ITIMER_VIRTUAL
Martin v. Löwis823725e2008-03-24 13:39:54 +0000128
Georg Brandl48310cd2009-01-03 21:18:54 +0000129 Decrements interval timer only when the process is executing, and delivers
Martin v. Löwis823725e2008-03-24 13:39:54 +0000130 SIGVTALRM upon expiration.
131
132
133.. data:: ITIMER_PROF
Georg Brandl48310cd2009-01-03 21:18:54 +0000134
135 Decrements interval timer both when the process executes and when the
136 system is executing on behalf of the process. Coupled with ITIMER_VIRTUAL,
137 this timer is usually used to profile the time spent by the application
Martin v. Löwis823725e2008-03-24 13:39:54 +0000138 in user and kernel space. SIGPROF is delivered upon expiration.
139
140
Victor Stinnera9293352011-04-30 15:21:58 +0200141.. data:: SIG_BLOCK
142
143 A possible value for the *how* parameter to :func:`pthread_sigmask`
144 indicating that signals are to be blocked.
145
146 .. versionadded:: 3.3
147
148.. data:: SIG_UNBLOCK
149
150 A possible value for the *how* parameter to :func:`pthread_sigmask`
151 indicating that signals are to be unblocked.
152
153 .. versionadded:: 3.3
154
155.. data:: SIG_SETMASK
156
157 A possible value for the *how* parameter to :func:`pthread_sigmask`
158 indicating that the signal mask is to be replaced.
159
160 .. versionadded:: 3.3
161
162
Martin v. Löwis823725e2008-03-24 13:39:54 +0000163The :mod:`signal` module defines one exception:
164
165.. exception:: ItimerError
166
167 Raised to signal an error from the underlying :func:`setitimer` or
168 :func:`getitimer` implementation. Expect this error if an invalid
Georg Brandl48310cd2009-01-03 21:18:54 +0000169 interval timer or a negative time is passed to :func:`setitimer`.
Antoine Pitrou4272d6a2011-10-12 19:10:10 +0200170 This error is a subtype of :exc:`OSError`.
171
172 .. versionadded:: 3.3
173 This error used to be a subtype of :exc:`IOError`, which is now an
174 alias of :exc:`OSError`.
Martin v. Löwis823725e2008-03-24 13:39:54 +0000175
176
Georg Brandl116aa622007-08-15 14:28:22 +0000177The :mod:`signal` module defines the following functions:
178
179
180.. function:: alarm(time)
181
182 If *time* is non-zero, this function requests that a :const:`SIGALRM` signal be
183 sent to the process in *time* seconds. Any previously scheduled alarm is
184 canceled (only one alarm can be scheduled at any time). The returned value is
185 then the number of seconds before any previously set alarm was to have been
186 delivered. If *time* is zero, no alarm is scheduled, and any scheduled alarm is
187 canceled. If the return value is zero, no alarm is currently scheduled. (See
188 the Unix man page :manpage:`alarm(2)`.) Availability: Unix.
189
190
191.. function:: getsignal(signalnum)
192
193 Return the current signal handler for the signal *signalnum*. The returned value
194 may be a callable Python object, or one of the special values
195 :const:`signal.SIG_IGN`, :const:`signal.SIG_DFL` or :const:`None`. Here,
196 :const:`signal.SIG_IGN` means that the signal was previously ignored,
197 :const:`signal.SIG_DFL` means that the default way of handling the signal was
198 previously in use, and ``None`` means that the previous signal handler was not
199 installed from Python.
200
201
202.. function:: pause()
203
204 Cause the process to sleep until a signal is received; the appropriate handler
205 will then be called. Returns nothing. Not on Windows. (See the Unix man page
206 :manpage:`signal(2)`.)
207
Ross Lagerwallbc808222011-06-25 12:13:40 +0200208 See also :func:`sigwait`, :func:`sigwaitinfo`, :func:`sigtimedwait` and
209 :func:`sigpending`.
Victor Stinnerb3e72192011-05-08 01:46:11 +0200210
211
212.. function:: pthread_kill(thread_id, signum)
213
Antoine Pitrou682d4432012-03-31 21:09:00 +0200214 Send the signal *signum* to the thread *thread_id*, another thread in the
215 same process as the caller. The target thread can be executing any code
216 (Python or not). However, if the target thread is executing the Python
217 interpreter, the Python signal handlers will be :ref:`executed by the main
218 thread <signals-and-threads>`. Therefore, the only point of sending a signal to a particular
219 Python thread would be to force a running system call to fail with
220 :exc:`InterruptedError`.
Victor Stinnerb3e72192011-05-08 01:46:11 +0200221
Victor Stinner2a129742011-05-30 23:02:52 +0200222 Use :func:`threading.get_ident()` or the :attr:`~threading.Thread.ident`
Antoine Pitrou682d4432012-03-31 21:09:00 +0200223 attribute of :class:`threading.Thread` objects to get a suitable value
224 for *thread_id*.
Victor Stinnerb3e72192011-05-08 01:46:11 +0200225
226 If *signum* is 0, then no signal is sent, but error checking is still
Antoine Pitrou682d4432012-03-31 21:09:00 +0200227 performed; this can be used to check if the target thread is still running.
Victor Stinnerb3e72192011-05-08 01:46:11 +0200228
229 Availability: Unix (see the man page :manpage:`pthread_kill(3)` for further
230 information).
231
232 See also :func:`os.kill`.
233
234 .. versionadded:: 3.3
235
Georg Brandl116aa622007-08-15 14:28:22 +0000236
Victor Stinnera9293352011-04-30 15:21:58 +0200237.. function:: pthread_sigmask(how, mask)
238
239 Fetch and/or change the signal mask of the calling thread. The signal mask
240 is the set of signals whose delivery is currently blocked for the caller.
Victor Stinner35b300c2011-05-04 13:20:35 +0200241 Return the old signal mask as a set of signals.
Victor Stinnera9293352011-04-30 15:21:58 +0200242
243 The behavior of the call is dependent on the value of *how*, as follows.
244
Antoine Pitrou8bbe9b42012-03-31 21:09:53 +0200245 * :data:`SIG_BLOCK`: The set of blocked signals is the union of the current
246 set and the *mask* argument.
247 * :data:`SIG_UNBLOCK`: The signals in *mask* are removed from the current
248 set of blocked signals. It is permissible to attempt to unblock a
249 signal which is not blocked.
250 * :data:`SIG_SETMASK`: The set of blocked signals is set to the *mask*
251 argument.
Victor Stinnera9293352011-04-30 15:21:58 +0200252
Victor Stinner35b300c2011-05-04 13:20:35 +0200253 *mask* is a set of signal numbers (e.g. {:const:`signal.SIGINT`,
254 :const:`signal.SIGTERM`}). Use ``range(1, signal.NSIG)`` for a full mask
255 including all signals.
Victor Stinnera9293352011-04-30 15:21:58 +0200256
257 For example, ``signal.pthread_sigmask(signal.SIG_BLOCK, [])`` reads the
258 signal mask of the calling thread.
259
260 Availability: Unix. See the man page :manpage:`sigprocmask(3)` and
261 :manpage:`pthread_sigmask(3)` for further information.
262
Victor Stinnerb3e72192011-05-08 01:46:11 +0200263 See also :func:`pause`, :func:`sigpending` and :func:`sigwait`.
264
Victor Stinnera9293352011-04-30 15:21:58 +0200265 .. versionadded:: 3.3
266
267
Martin v. Löwis823725e2008-03-24 13:39:54 +0000268.. function:: setitimer(which, seconds[, interval])
269
Georg Brandl48310cd2009-01-03 21:18:54 +0000270 Sets given interval timer (one of :const:`signal.ITIMER_REAL`,
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +0000271 :const:`signal.ITIMER_VIRTUAL` or :const:`signal.ITIMER_PROF`) specified
Georg Brandl48310cd2009-01-03 21:18:54 +0000272 by *which* to fire after *seconds* (float is accepted, different from
Martin v. Löwis823725e2008-03-24 13:39:54 +0000273 :func:`alarm`) and after that every *interval* seconds. The interval
274 timer specified by *which* can be cleared by setting seconds to zero.
275
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +0000276 When an interval timer fires, a signal is sent to the process.
Georg Brandl48310cd2009-01-03 21:18:54 +0000277 The signal sent is dependent on the timer being used;
278 :const:`signal.ITIMER_REAL` will deliver :const:`SIGALRM`,
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +0000279 :const:`signal.ITIMER_VIRTUAL` sends :const:`SIGVTALRM`,
280 and :const:`signal.ITIMER_PROF` will deliver :const:`SIGPROF`.
281
Martin v. Löwis823725e2008-03-24 13:39:54 +0000282 The old values are returned as a tuple: (delay, interval).
283
Georg Brandl495f7b52009-10-27 15:28:25 +0000284 Attempting to pass an invalid interval timer will cause an
285 :exc:`ItimerError`. Availability: Unix.
Martin v. Löwis823725e2008-03-24 13:39:54 +0000286
Martin v. Löwis823725e2008-03-24 13:39:54 +0000287
288.. function:: getitimer(which)
289
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +0000290 Returns current value of a given interval timer specified by *which*.
Georg Brandl495f7b52009-10-27 15:28:25 +0000291 Availability: Unix.
Martin v. Löwis823725e2008-03-24 13:39:54 +0000292
Martin v. Löwis823725e2008-03-24 13:39:54 +0000293
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000294.. function:: set_wakeup_fd(fd)
295
Victor Stinnerd49b1f12011-05-08 02:03:15 +0200296 Set the wakeup file descriptor to *fd*. When a signal is received, the
297 signal number is written as a single byte into the fd. This can be used by
298 a library to wakeup a poll or select call, allowing the signal to be fully
299 processed.
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000300
301 The old wakeup fd is returned. *fd* must be non-blocking. It is up to the
302 library to remove any bytes before calling poll or select again.
303
Victor Stinnerd49b1f12011-05-08 02:03:15 +0200304 Use for example ``struct.unpack('%uB' % len(data), data)`` to decode the
305 signal numbers list.
306
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000307 When threads are enabled, this function can only be called from the main thread;
308 attempting to call it from other threads will cause a :exc:`ValueError`
309 exception to be raised.
310
311
Christian Heimes8640e742008-02-23 16:23:06 +0000312.. function:: siginterrupt(signalnum, flag)
313
Georg Brandl18244152009-09-02 20:34:52 +0000314 Change system call restart behaviour: if *flag* is :const:`False`, system
315 calls will be restarted when interrupted by signal *signalnum*, otherwise
Georg Brandl495f7b52009-10-27 15:28:25 +0000316 system calls will be interrupted. Returns nothing. Availability: Unix (see
Georg Brandl18244152009-09-02 20:34:52 +0000317 the man page :manpage:`siginterrupt(3)` for further information).
Georg Brandl48310cd2009-01-03 21:18:54 +0000318
Georg Brandl18244152009-09-02 20:34:52 +0000319 Note that installing a signal handler with :func:`signal` will reset the
320 restart behaviour to interruptible by implicitly calling
Georg Brandl60203b42010-10-06 10:11:56 +0000321 :c:func:`siginterrupt` with a true *flag* value for the given signal.
Christian Heimes8640e742008-02-23 16:23:06 +0000322
Christian Heimes8640e742008-02-23 16:23:06 +0000323
Georg Brandl116aa622007-08-15 14:28:22 +0000324.. function:: signal(signalnum, handler)
325
326 Set the handler for signal *signalnum* to the function *handler*. *handler* can
327 be a callable Python object taking two arguments (see below), or one of the
328 special values :const:`signal.SIG_IGN` or :const:`signal.SIG_DFL`. The previous
329 signal handler will be returned (see the description of :func:`getsignal`
330 above). (See the Unix man page :manpage:`signal(2)`.)
331
332 When threads are enabled, this function can only be called from the main thread;
333 attempting to call it from other threads will cause a :exc:`ValueError`
334 exception to be raised.
335
336 The *handler* is called with two arguments: the signal number and the current
Georg Brandla6053b42009-09-01 08:11:14 +0000337 stack frame (``None`` or a frame object; for a description of frame objects,
338 see the :ref:`description in the type hierarchy <frame-objects>` or see the
339 attribute descriptions in the :mod:`inspect` module).
Georg Brandl116aa622007-08-15 14:28:22 +0000340
Brian Curtinef9efbd2010-08-06 19:27:32 +0000341 On Windows, :func:`signal` can only be called with :const:`SIGABRT`,
342 :const:`SIGFPE`, :const:`SIGILL`, :const:`SIGINT`, :const:`SIGSEGV`, or
343 :const:`SIGTERM`. A :exc:`ValueError` will be raised in any other case.
344
Georg Brandl116aa622007-08-15 14:28:22 +0000345
Victor Stinnerb3e72192011-05-08 01:46:11 +0200346.. function:: sigpending()
347
348 Examine the set of signals that are pending for delivery to the calling
349 thread (i.e., the signals which have been raised while blocked). Return the
350 set of the pending signals.
351
352 Availability: Unix (see the man page :manpage:`sigpending(2)` for further
353 information).
354
355 See also :func:`pause`, :func:`pthread_sigmask` and :func:`sigwait`.
356
357 .. versionadded:: 3.3
358
359
360.. function:: sigwait(sigset)
361
362 Suspend execution of the calling thread until the delivery of one of the
363 signals specified in the signal set *sigset*. The function accepts the signal
364 (removes it from the pending list of signals), and returns the signal number.
365
366 Availability: Unix (see the man page :manpage:`sigwait(3)` for further
367 information).
368
Ross Lagerwallbc808222011-06-25 12:13:40 +0200369 See also :func:`pause`, :func:`pthread_sigmask`, :func:`sigpending`,
370 :func:`sigwaitinfo` and :func:`sigtimedwait`.
371
372 .. versionadded:: 3.3
373
374
375.. function:: sigwaitinfo(sigset)
376
377 Suspend execution of the calling thread until the delivery of one of the
378 signals specified in the signal set *sigset*. The function accepts the
379 signal and removes it from the pending list of signals. If one of the
380 signals in *sigset* is already pending for the calling thread, the function
381 will return immediately with information about that signal. The signal
382 handler is not called for the delivered signal. The function raises an
Antoine Pitrou767c0a82011-10-23 23:52:23 +0200383 :exc:`InterruptedError` if it is interrupted by a signal that is not in
384 *sigset*.
Ross Lagerwallbc808222011-06-25 12:13:40 +0200385
386 The return value is an object representing the data contained in the
387 :c:type:`siginfo_t` structure, namely: :attr:`si_signo`, :attr:`si_code`,
388 :attr:`si_errno`, :attr:`si_pid`, :attr:`si_uid`, :attr:`si_status`,
389 :attr:`si_band`.
390
391 Availability: Unix (see the man page :manpage:`sigwaitinfo(2)` for further
392 information).
393
394 See also :func:`pause`, :func:`sigwait` and :func:`sigtimedwait`.
395
396 .. versionadded:: 3.3
397
398
Victor Stinner643cd682012-03-02 22:54:03 +0100399.. function:: sigtimedwait(sigset, timeout)
Ross Lagerwallbc808222011-06-25 12:13:40 +0200400
Victor Stinner643cd682012-03-02 22:54:03 +0100401 Like :func:`sigwaitinfo`, but takes an additional *timeout* argument
402 specifying a timeout. If *timeout* is specified as :const:`0`, a poll is
403 performed. Returns :const:`None` if a timeout occurs.
Ross Lagerwallbc808222011-06-25 12:13:40 +0200404
405 Availability: Unix (see the man page :manpage:`sigtimedwait(2)` for further
406 information).
407
408 See also :func:`pause`, :func:`sigwait` and :func:`sigwaitinfo`.
Victor Stinnerb3e72192011-05-08 01:46:11 +0200409
410 .. versionadded:: 3.3
411
412
Georg Brandl116aa622007-08-15 14:28:22 +0000413.. _signal-example:
414
415Example
416-------
417
418Here is a minimal example program. It uses the :func:`alarm` function to limit
419the time spent waiting to open a file; this is useful if the file is for a
420serial device that may not be turned on, which would normally cause the
421:func:`os.open` to hang indefinitely. The solution is to set a 5-second alarm
422before opening the file; if the operation takes too long, the alarm signal will
423be sent, and the handler raises an exception. ::
424
425 import signal, os
426
427 def handler(signum, frame):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000428 print('Signal handler called with signal', signum)
Antoine Pitrou4272d6a2011-10-12 19:10:10 +0200429 raise OSError("Couldn't open device!")
Georg Brandl116aa622007-08-15 14:28:22 +0000430
431 # Set the signal handler and a 5-second alarm
432 signal.signal(signal.SIGALRM, handler)
433 signal.alarm(5)
434
435 # This open() may hang indefinitely
Georg Brandl48310cd2009-01-03 21:18:54 +0000436 fd = os.open('/dev/ttyS0', os.O_RDWR)
Georg Brandl116aa622007-08-15 14:28:22 +0000437
438 signal.alarm(0) # Disable the alarm
439