• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`signal` --- Set handlers for asynchronous events
2======================================================
3
4.. module:: signal
5   :synopsis: Set handlers for asynchronous events.
6
7--------------
8
9This module provides mechanisms to use signal handlers in Python.
10
11
12General rules
13-------------
14
15The :func:`signal.signal` function allows defining custom handlers to be
16executed when a signal is received.  A small number of default handlers are
17installed: :const:`SIGPIPE` is ignored (so write errors on pipes and sockets
18can be reported as ordinary Python exceptions) and :const:`SIGINT` is
19translated into a :exc:`KeyboardInterrupt` exception if the parent process
20has not changed it.
21
22A handler for a particular signal, once set, remains installed until it is
23explicitly reset (Python emulates the BSD style interface regardless of the
24underlying implementation), with the exception of the handler for
25:const:`SIGCHLD`, which follows the underlying implementation.
26
27
28Execution of Python signal handlers
29^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
30
31A Python signal handler does not get executed inside the low-level (C) signal
32handler.  Instead, the low-level signal handler sets a flag which tells the
33:term:`virtual machine` to execute the corresponding Python signal handler
34at a later point(for example at the next :term:`bytecode` instruction).
35This has consequences:
36
37* It makes little sense to catch synchronous errors like :const:`SIGFPE` or
38  :const:`SIGSEGV` that are caused by an invalid operation in C code.  Python
39  will return from the signal handler to the C code, which is likely to raise
40  the same signal again, causing Python to apparently hang.  From Python 3.3
41  onwards, you can use the :mod:`faulthandler` module to report on synchronous
42  errors.
43
44* A long-running calculation implemented purely in C (such as regular
45  expression matching on a large body of text) may run uninterrupted for an
46  arbitrary amount of time, regardless of any signals received.  The Python
47  signal handlers will be called when the calculation finishes.
48
49
50.. _signals-and-threads:
51
52
53Signals and threads
54^^^^^^^^^^^^^^^^^^^
55
56Python signal handlers are always executed in the main Python thread of the main interpreter,
57even if the signal was received in another thread.  This means that signals
58can't be used as a means of inter-thread communication.  You can use
59the synchronization primitives from the :mod:`threading` module instead.
60
61Besides, only the main thread of the main interpreter is allowed to set a new signal handler.
62
63
64Module contents
65---------------
66
67.. versionchanged:: 3.5
68   signal (SIG*), handler (:const:`SIG_DFL`, :const:`SIG_IGN`) and sigmask
69   (:const:`SIG_BLOCK`, :const:`SIG_UNBLOCK`, :const:`SIG_SETMASK`)
70   related constants listed below were turned into
71   :class:`enums <enum.IntEnum>`.
72   :func:`getsignal`, :func:`pthread_sigmask`, :func:`sigpending` and
73   :func:`sigwait` functions return human-readable
74   :class:`enums <enum.IntEnum>`.
75
76
77The variables defined in the :mod:`signal` module are:
78
79
80.. data:: SIG_DFL
81
82   This is one of two standard signal handling options; it will simply perform
83   the default function for the signal.  For example, on most systems the
84   default action for :const:`SIGQUIT` is to dump core and exit, while the
85   default action for :const:`SIGCHLD` is to simply ignore it.
86
87
88.. data:: SIG_IGN
89
90   This is another standard signal handler, which will simply ignore the given
91   signal.
92
93
94.. data:: SIGABRT
95
96   Abort signal from :manpage:`abort(3)`.
97
98.. data:: SIGALRM
99
100   Timer signal from :manpage:`alarm(2)`.
101
102   .. availability:: Unix.
103
104.. data:: SIGBREAK
105
106   Interrupt from keyboard (CTRL + BREAK).
107
108   .. availability:: Windows.
109
110.. data:: SIGBUS
111
112   Bus error (bad memory access).
113
114   .. availability:: Unix.
115
116.. data:: SIGCHLD
117
118   Child process stopped or terminated.
119
120   .. availability:: Unix.
121
122.. data:: SIGCLD
123
124   Alias to :data:`SIGCHLD`.
125
126.. data:: SIGCONT
127
128   Continue the process if it is currently stopped
129
130   .. availability:: Unix.
131
132.. data:: SIGFPE
133
134   Floating-point exception. For example, division by zero.
135
136   .. seealso::
137      :exc:`ZeroDivisionError` is raised when the second argument of a division
138      or modulo operation is zero.
139
140.. data:: SIGHUP
141
142   Hangup detected on controlling terminal or death of controlling process.
143
144   .. availability:: Unix.
145
146.. data:: SIGILL
147
148   Illegal instruction.
149
150.. data:: SIGINT
151
152   Interrupt from keyboard (CTRL + C).
153
154   Default action is to raise :exc:`KeyboardInterrupt`.
155
156.. data:: SIGKILL
157
158   Kill signal.
159
160   It cannot be caught, blocked, or ignored.
161
162   .. availability:: Unix.
163
164.. data:: SIGPIPE
165
166   Broken pipe: write to pipe with no readers.
167
168   Default action is to ignore the signal.
169
170   .. availability:: Unix.
171
172.. data:: SIGSEGV
173
174   Segmentation fault: invalid memory reference.
175
176.. data:: SIGTERM
177
178   Termination signal.
179
180.. data:: SIGUSR1
181
182   User-defined signal 1.
183
184   .. availability:: Unix.
185
186.. data:: SIGUSR2
187
188   User-defined signal 2.
189
190   .. availability:: Unix.
191
192.. data:: SIGWINCH
193
194   Window resize signal.
195
196   .. availability:: Unix.
197
198.. data:: SIG*
199
200   All the signal numbers are defined symbolically.  For example, the hangup signal
201   is defined as :const:`signal.SIGHUP`; the variable names are identical to the
202   names used in C programs, as found in ``<signal.h>``.  The Unix man page for
203   ':c:func:`signal`' lists the existing signals (on some systems this is
204   :manpage:`signal(2)`, on others the list is in :manpage:`signal(7)`). Note that
205   not all systems define the same set of signal names; only those names defined by
206   the system are defined by this module.
207
208
209.. data:: CTRL_C_EVENT
210
211   The signal corresponding to the :kbd:`Ctrl+C` keystroke event. This signal can
212   only be used with :func:`os.kill`.
213
214   .. availability:: Windows.
215
216   .. versionadded:: 3.2
217
218
219.. data:: CTRL_BREAK_EVENT
220
221   The signal corresponding to the :kbd:`Ctrl+Break` keystroke event. This signal can
222   only be used with :func:`os.kill`.
223
224   .. availability:: Windows.
225
226   .. versionadded:: 3.2
227
228
229.. data:: NSIG
230
231   One more than the number of the highest signal number.
232
233
234.. data:: ITIMER_REAL
235
236   Decrements interval timer in real time, and delivers :const:`SIGALRM` upon
237   expiration.
238
239
240.. data:: ITIMER_VIRTUAL
241
242   Decrements interval timer only when the process is executing, and delivers
243   SIGVTALRM upon expiration.
244
245
246.. data:: ITIMER_PROF
247
248   Decrements interval timer both when the process executes and when the
249   system is executing on behalf of the process. Coupled with ITIMER_VIRTUAL,
250   this timer is usually used to profile the time spent by the application
251   in user and kernel space. SIGPROF is delivered upon expiration.
252
253
254.. data:: SIG_BLOCK
255
256   A possible value for the *how* parameter to :func:`pthread_sigmask`
257   indicating that signals are to be blocked.
258
259   .. versionadded:: 3.3
260
261.. data:: SIG_UNBLOCK
262
263   A possible value for the *how* parameter to :func:`pthread_sigmask`
264   indicating that signals are to be unblocked.
265
266   .. versionadded:: 3.3
267
268.. data:: SIG_SETMASK
269
270   A possible value for the *how* parameter to :func:`pthread_sigmask`
271   indicating that the signal mask is to be replaced.
272
273   .. versionadded:: 3.3
274
275
276The :mod:`signal` module defines one exception:
277
278.. exception:: ItimerError
279
280   Raised to signal an error from the underlying :func:`setitimer` or
281   :func:`getitimer` implementation. Expect this error if an invalid
282   interval timer or a negative time is passed to :func:`setitimer`.
283   This error is a subtype of :exc:`OSError`.
284
285   .. versionadded:: 3.3
286      This error used to be a subtype of :exc:`IOError`, which is now an
287      alias of :exc:`OSError`.
288
289
290The :mod:`signal` module defines the following functions:
291
292
293.. function:: alarm(time)
294
295   If *time* is non-zero, this function requests that a :const:`SIGALRM` signal be
296   sent to the process in *time* seconds. Any previously scheduled alarm is
297   canceled (only one alarm can be scheduled at any time).  The returned value is
298   then the number of seconds before any previously set alarm was to have been
299   delivered. If *time* is zero, no alarm is scheduled, and any scheduled alarm is
300   canceled.  If the return value is zero, no alarm is currently scheduled.
301
302   .. availability:: Unix.  See the man page :manpage:`alarm(2)` for further
303      information.
304
305
306.. function:: getsignal(signalnum)
307
308   Return the current signal handler for the signal *signalnum*. The returned value
309   may be a callable Python object, or one of the special values
310   :const:`signal.SIG_IGN`, :const:`signal.SIG_DFL` or :const:`None`.  Here,
311   :const:`signal.SIG_IGN` means that the signal was previously ignored,
312   :const:`signal.SIG_DFL` means that the default way of handling the signal was
313   previously in use, and ``None`` means that the previous signal handler was not
314   installed from Python.
315
316
317.. function:: strsignal(signalnum)
318
319   Return the system description of the signal *signalnum*, such as
320   "Interrupt", "Segmentation fault", etc. Returns :const:`None` if the signal
321   is not recognized.
322
323   .. versionadded:: 3.8
324
325
326.. function:: valid_signals()
327
328   Return the set of valid signal numbers on this platform.  This can be
329   less than ``range(1, NSIG)`` if some signals are reserved by the system
330   for internal use.
331
332   .. versionadded:: 3.8
333
334
335.. function:: pause()
336
337   Cause the process to sleep until a signal is received; the appropriate handler
338   will then be called.  Returns nothing.
339
340   .. availability:: Unix.  See the man page :manpage:`signal(2)` for further
341      information.
342
343   See also :func:`sigwait`, :func:`sigwaitinfo`, :func:`sigtimedwait` and
344   :func:`sigpending`.
345
346
347.. function:: raise_signal(signum)
348
349   Sends a signal to the calling process. Returns nothing.
350
351   .. versionadded:: 3.8
352
353
354.. function:: pidfd_send_signal(pidfd, sig, siginfo=None, flags=0)
355
356   Send signal *sig* to the process referred to by file descriptor *pidfd*.
357   Python does not currently support the *siginfo* parameter; it must be
358   ``None``.  The *flags* argument is provided for future extensions; no flag
359   values are currently defined.
360
361   See the :manpage:`pidfd_send_signal(2)` man page for more information.
362
363   .. availability:: Linux 5.1+
364   .. versionadded:: 3.9
365
366
367.. function:: pthread_kill(thread_id, signalnum)
368
369   Send the signal *signalnum* to the thread *thread_id*, another thread in the
370   same process as the caller.  The target thread can be executing any code
371   (Python or not).  However, if the target thread is executing the Python
372   interpreter, the Python signal handlers will be :ref:`executed by the main
373   thread of the main interpreter <signals-and-threads>`.  Therefore, the only point of sending a
374   signal to a particular Python thread would be to force a running system call
375   to fail with :exc:`InterruptedError`.
376
377   Use :func:`threading.get_ident()` or the :attr:`~threading.Thread.ident`
378   attribute of :class:`threading.Thread` objects to get a suitable value
379   for *thread_id*.
380
381   If *signalnum* is 0, then no signal is sent, but error checking is still
382   performed; this can be used to check if the target thread is still running.
383
384   .. audit-event:: signal.pthread_kill thread_id,signalnum signal.pthread_kill
385
386   .. availability:: Unix.  See the man page :manpage:`pthread_kill(3)` for further
387      information.
388
389   See also :func:`os.kill`.
390
391   .. versionadded:: 3.3
392
393
394.. function:: pthread_sigmask(how, mask)
395
396   Fetch and/or change the signal mask of the calling thread.  The signal mask
397   is the set of signals whose delivery is currently blocked for the caller.
398   Return the old signal mask as a set of signals.
399
400   The behavior of the call is dependent on the value of *how*, as follows.
401
402   * :data:`SIG_BLOCK`: The set of blocked signals is the union of the current
403     set and the *mask* argument.
404   * :data:`SIG_UNBLOCK`: The signals in *mask* are removed from the current
405     set of blocked signals.  It is permissible to attempt to unblock a
406     signal which is not blocked.
407   * :data:`SIG_SETMASK`: The set of blocked signals is set to the *mask*
408     argument.
409
410   *mask* is a set of signal numbers (e.g. {:const:`signal.SIGINT`,
411   :const:`signal.SIGTERM`}). Use :func:`~signal.valid_signals` for a full
412   mask including all signals.
413
414   For example, ``signal.pthread_sigmask(signal.SIG_BLOCK, [])`` reads the
415   signal mask of the calling thread.
416
417   :data:`SIGKILL` and :data:`SIGSTOP` cannot be blocked.
418
419   .. availability:: Unix.  See the man page :manpage:`sigprocmask(2)` and
420      :manpage:`pthread_sigmask(3)` for further information.
421
422   See also :func:`pause`, :func:`sigpending` and :func:`sigwait`.
423
424   .. versionadded:: 3.3
425
426
427.. function:: setitimer(which, seconds, interval=0.0)
428
429   Sets given interval timer (one of :const:`signal.ITIMER_REAL`,
430   :const:`signal.ITIMER_VIRTUAL` or :const:`signal.ITIMER_PROF`) specified
431   by *which* to fire after *seconds* (float is accepted, different from
432   :func:`alarm`) and after that every *interval* seconds (if *interval*
433   is non-zero). The interval timer specified by *which* can be cleared by
434   setting *seconds* to zero.
435
436   When an interval timer fires, a signal is sent to the process.
437   The signal sent is dependent on the timer being used;
438   :const:`signal.ITIMER_REAL` will deliver :const:`SIGALRM`,
439   :const:`signal.ITIMER_VIRTUAL` sends :const:`SIGVTALRM`,
440   and :const:`signal.ITIMER_PROF` will deliver :const:`SIGPROF`.
441
442   The old values are returned as a tuple: (delay, interval).
443
444   Attempting to pass an invalid interval timer will cause an
445   :exc:`ItimerError`.
446
447   .. availability:: Unix.
448
449
450.. function:: getitimer(which)
451
452   Returns current value of a given interval timer specified by *which*.
453
454   .. availability:: Unix.
455
456
457.. function:: set_wakeup_fd(fd, *, warn_on_full_buffer=True)
458
459   Set the wakeup file descriptor to *fd*.  When a signal is received, the
460   signal number is written as a single byte into the fd.  This can be used by
461   a library to wakeup a poll or select call, allowing the signal to be fully
462   processed.
463
464   The old wakeup fd is returned (or -1 if file descriptor wakeup was not
465   enabled).  If *fd* is -1, file descriptor wakeup is disabled.
466   If not -1, *fd* must be non-blocking.  It is up to the library to remove
467   any bytes from *fd* before calling poll or select again.
468
469   When threads are enabled, this function can only be called
470   from :ref:`the main thread of the main interpreter <signals-and-threads>`;
471   attempting to call it from other threads will cause a :exc:`ValueError`
472   exception to be raised.
473
474   There are two common ways to use this function. In both approaches,
475   you use the fd to wake up when a signal arrives, but then they
476   differ in how they determine *which* signal or signals have
477   arrived.
478
479   In the first approach, we read the data out of the fd's buffer, and
480   the byte values give you the signal numbers. This is simple, but in
481   rare cases it can run into a problem: generally the fd will have a
482   limited amount of buffer space, and if too many signals arrive too
483   quickly, then the buffer may become full, and some signals may be
484   lost. If you use this approach, then you should set
485   ``warn_on_full_buffer=True``, which will at least cause a warning
486   to be printed to stderr when signals are lost.
487
488   In the second approach, we use the wakeup fd *only* for wakeups,
489   and ignore the actual byte values. In this case, all we care about
490   is whether the fd's buffer is empty or non-empty; a full buffer
491   doesn't indicate a problem at all. If you use this approach, then
492   you should set ``warn_on_full_buffer=False``, so that your users
493   are not confused by spurious warning messages.
494
495   .. versionchanged:: 3.5
496      On Windows, the function now also supports socket handles.
497
498   .. versionchanged:: 3.7
499      Added ``warn_on_full_buffer`` parameter.
500
501.. function:: siginterrupt(signalnum, flag)
502
503   Change system call restart behaviour: if *flag* is :const:`False`, system
504   calls will be restarted when interrupted by signal *signalnum*, otherwise
505   system calls will be interrupted.  Returns nothing.
506
507   .. availability:: Unix.  See the man page :manpage:`siginterrupt(3)`
508      for further information.
509
510   Note that installing a signal handler with :func:`signal` will reset the
511   restart behaviour to interruptible by implicitly calling
512   :c:func:`siginterrupt` with a true *flag* value for the given signal.
513
514
515.. function:: signal(signalnum, handler)
516
517   Set the handler for signal *signalnum* to the function *handler*.  *handler* can
518   be a callable Python object taking two arguments (see below), or one of the
519   special values :const:`signal.SIG_IGN` or :const:`signal.SIG_DFL`.  The previous
520   signal handler will be returned (see the description of :func:`getsignal`
521   above).  (See the Unix man page :manpage:`signal(2)` for further information.)
522
523   When threads are enabled, this function can only be called
524   from :ref:`the main thread of the main interpreter <signals-and-threads>`;
525   attempting to call it from other threads will cause a :exc:`ValueError`
526   exception to be raised.
527
528   The *handler* is called with two arguments: the signal number and the current
529   stack frame (``None`` or a frame object; for a description of frame objects,
530   see the :ref:`description in the type hierarchy <frame-objects>` or see the
531   attribute descriptions in the :mod:`inspect` module).
532
533   On Windows, :func:`signal` can only be called with :const:`SIGABRT`,
534   :const:`SIGFPE`, :const:`SIGILL`, :const:`SIGINT`, :const:`SIGSEGV`,
535   :const:`SIGTERM`, or :const:`SIGBREAK`.
536   A :exc:`ValueError` will be raised in any other case.
537   Note that not all systems define the same set of signal names; an
538   :exc:`AttributeError` will be raised if a signal name is not defined as
539   ``SIG*`` module level constant.
540
541
542.. function:: sigpending()
543
544   Examine the set of signals that are pending for delivery to the calling
545   thread (i.e., the signals which have been raised while blocked).  Return the
546   set of the pending signals.
547
548   .. availability:: Unix.  See the man page :manpage:`sigpending(2)` for further
549      information.
550
551   See also :func:`pause`, :func:`pthread_sigmask` and :func:`sigwait`.
552
553   .. versionadded:: 3.3
554
555
556.. function:: sigwait(sigset)
557
558   Suspend execution of the calling thread until the delivery of one of the
559   signals specified in the signal set *sigset*.  The function accepts the signal
560   (removes it from the pending list of signals), and returns the signal number.
561
562   .. availability:: Unix.  See the man page :manpage:`sigwait(3)` for further
563      information.
564
565   See also :func:`pause`, :func:`pthread_sigmask`, :func:`sigpending`,
566   :func:`sigwaitinfo` and :func:`sigtimedwait`.
567
568   .. versionadded:: 3.3
569
570
571.. function:: sigwaitinfo(sigset)
572
573   Suspend execution of the calling thread until the delivery of one of the
574   signals specified in the signal set *sigset*.  The function accepts the
575   signal and removes it from the pending list of signals. If one of the
576   signals in *sigset* is already pending for the calling thread, the function
577   will return immediately with information about that signal. The signal
578   handler is not called for the delivered signal. The function raises an
579   :exc:`InterruptedError` if it is interrupted by a signal that is not in
580   *sigset*.
581
582   The return value is an object representing the data contained in the
583   :c:type:`siginfo_t` structure, namely: :attr:`si_signo`, :attr:`si_code`,
584   :attr:`si_errno`, :attr:`si_pid`, :attr:`si_uid`, :attr:`si_status`,
585   :attr:`si_band`.
586
587   .. availability:: Unix.  See the man page :manpage:`sigwaitinfo(2)` for further
588      information.
589
590   See also :func:`pause`, :func:`sigwait` and :func:`sigtimedwait`.
591
592   .. versionadded:: 3.3
593
594   .. versionchanged:: 3.5
595      The function is now retried if interrupted by a signal not in *sigset*
596      and the signal handler does not raise an exception (see :pep:`475` for
597      the rationale).
598
599
600.. function:: sigtimedwait(sigset, timeout)
601
602   Like :func:`sigwaitinfo`, but takes an additional *timeout* argument
603   specifying a timeout. If *timeout* is specified as :const:`0`, a poll is
604   performed. Returns :const:`None` if a timeout occurs.
605
606   .. availability:: Unix.  See the man page :manpage:`sigtimedwait(2)` for further
607      information.
608
609   See also :func:`pause`, :func:`sigwait` and :func:`sigwaitinfo`.
610
611   .. versionadded:: 3.3
612
613   .. versionchanged:: 3.5
614      The function is now retried with the recomputed *timeout* if interrupted
615      by a signal not in *sigset* and the signal handler does not raise an
616      exception (see :pep:`475` for the rationale).
617
618
619.. _signal-example:
620
621Example
622-------
623
624Here is a minimal example program. It uses the :func:`alarm` function to limit
625the time spent waiting to open a file; this is useful if the file is for a
626serial device that may not be turned on, which would normally cause the
627:func:`os.open` to hang indefinitely.  The solution is to set a 5-second alarm
628before opening the file; if the operation takes too long, the alarm signal will
629be sent, and the handler raises an exception. ::
630
631   import signal, os
632
633   def handler(signum, frame):
634       print('Signal handler called with signal', signum)
635       raise OSError("Couldn't open device!")
636
637   # Set the signal handler and a 5-second alarm
638   signal.signal(signal.SIGALRM, handler)
639   signal.alarm(5)
640
641   # This open() may hang indefinitely
642   fd = os.open('/dev/ttyS0', os.O_RDWR)
643
644   signal.alarm(0)          # Disable the alarm
645
646Note on SIGPIPE
647---------------
648
649Piping output of your program to tools like :manpage:`head(1)` will
650cause a :const:`SIGPIPE` signal to be sent to your process when the receiver
651of its standard output closes early.  This results in an exception
652like :code:`BrokenPipeError: [Errno 32] Broken pipe`.  To handle this
653case, wrap your entry point to catch this exception as follows::
654
655    import os
656    import sys
657
658    def main():
659        try:
660            # simulate large output (your code replaces this loop)
661            for x in range(10000):
662                print("y")
663            # flush output here to force SIGPIPE to be triggered
664            # while inside this try block.
665            sys.stdout.flush()
666        except BrokenPipeError:
667            # Python flushes standard streams on exit; redirect remaining output
668            # to devnull to avoid another BrokenPipeError at shutdown
669            devnull = os.open(os.devnull, os.O_WRONLY)
670            os.dup2(devnull, sys.stdout.fileno())
671            sys.exit(1)  # Python exits with error code 1 on EPIPE
672
673    if __name__ == '__main__':
674        main()
675
676Do not set :const:`SIGPIPE`'s disposition to :const:`SIG_DFL`
677in order to avoid :exc:`BrokenPipeError`.  Doing that would cause
678your program to exit unexpectedly also whenever any socket connection
679is interrupted while your program is still writing to it.
680