Blame docs/src/signal.rst

Packit Service 7c31a4
Packit Service 7c31a4
.. _signal:
Packit Service 7c31a4
Packit Service 7c31a4
:c:type:`uv_signal_t` --- Signal handle
Packit Service 7c31a4
=======================================
Packit Service 7c31a4
Packit Service 7c31a4
Signal handles implement Unix style signal handling on a per-event loop bases.
Packit Service 7c31a4
Packit Service 7c31a4
Windows notes
Packit Service 7c31a4
-------------
Packit Service 7c31a4
Packit Service 7c31a4
Reception of some signals is emulated:
Packit Service 7c31a4
Packit Service 7c31a4
* SIGINT is normally delivered when the user presses CTRL+C. However, like
Packit Service 7c31a4
  on Unix, it is not generated when terminal raw mode is enabled.
Packit Service 7c31a4
Packit Service 7c31a4
* SIGBREAK is delivered when the user pressed CTRL + BREAK.
Packit Service 7c31a4
Packit Service 7c31a4
* SIGHUP is generated when the user closes the console window. On SIGHUP the
Packit Service 7c31a4
  program is given approximately 10 seconds to perform cleanup. After that
Packit Service 7c31a4
  Windows will unconditionally terminate it.
Packit Service 7c31a4
Packit Service 7c31a4
* SIGWINCH is raised whenever libuv detects that the console has been
Packit Service 7c31a4
  resized. When a libuv app is running under a console emulator, or when a
Packit Service 7c31a4
  32-bit libuv app is running on 64-bit system, SIGWINCH will be emulated. In
Packit Service 7c31a4
  such cases SIGWINCH signals may not always be delivered in a timely manner.
Packit Service 7c31a4
  For a writable :c:type:`uv_tty_t` handle libuv will only detect size changes
Packit Service 7c31a4
  when the cursor is moved. When a readable :c:type:`uv_tty_t` handle is used,
Packit Service 7c31a4
  resizing of the console buffer will be detected only if the handle is in raw
Packit Service 7c31a4
  mode and is being read.
Packit Service 7c31a4
Packit Service 7c31a4
* Watchers for other signals can be successfully created, but these signals
Packit Service 7c31a4
  are never received. These signals are: `SIGILL`, `SIGABRT`, `SIGFPE`, `SIGSEGV`,
Packit Service 7c31a4
  `SIGTERM` and `SIGKILL.`
Packit Service 7c31a4
Packit Service 7c31a4
* Calls to raise() or abort() to programmatically raise a signal are
Packit Service 7c31a4
  not detected by libuv; these will not trigger a signal watcher.
Packit Service 7c31a4
Packit Service 7c31a4
.. versionchanged:: 1.15.0 SIGWINCH support on Windows was improved.
Packit Service 7c31a4
.. versionchanged:: 1.31.0 32-bit libuv SIGWINCH support on 64-bit Windows was
Packit Service 7c31a4
                           rolled back to old implementation.
Packit Service 7c31a4
Packit Service 7c31a4
Unix notes
Packit Service 7c31a4
----------
Packit Service 7c31a4
Packit Service 7c31a4
* SIGKILL and SIGSTOP are impossible to catch.
Packit Service 7c31a4
Packit Service 7c31a4
* Handling SIGBUS, SIGFPE, SIGILL or SIGSEGV via libuv results into undefined behavior.
Packit Service 7c31a4
Packit Service 7c31a4
* SIGABRT will not be caught by libuv if generated by `abort()`, e.g. through `assert()`.
Packit Service 7c31a4
Packit Service 7c31a4
* On Linux SIGRT0 and SIGRT1 (signals 32 and 33) are used by the NPTL pthreads library to
Packit Service 7c31a4
  manage threads. Installing watchers for those signals will lead to unpredictable behavior
Packit Service 7c31a4
  and is strongly discouraged. Future versions of libuv may simply reject them.
Packit Service 7c31a4
Packit Service 7c31a4
Packit Service 7c31a4
Data types
Packit Service 7c31a4
----------
Packit Service 7c31a4
Packit Service 7c31a4
.. c:type:: uv_signal_t
Packit Service 7c31a4
Packit Service 7c31a4
    Signal handle type.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:type:: void (*uv_signal_cb)(uv_signal_t* handle, int signum)
Packit Service 7c31a4
Packit Service 7c31a4
    Type definition for callback passed to :c:func:`uv_signal_start`.
Packit Service 7c31a4
Packit Service 7c31a4
Packit Service 7c31a4
Public members
Packit Service 7c31a4
^^^^^^^^^^^^^^
Packit Service 7c31a4
Packit Service 7c31a4
.. c:member:: int uv_signal_t.signum
Packit Service 7c31a4
Packit Service 7c31a4
    Signal being monitored by this handle. Readonly.
Packit Service 7c31a4
Packit Service 7c31a4
.. seealso:: The :c:type:`uv_handle_t` members also apply.
Packit Service 7c31a4
Packit Service 7c31a4
Packit Service 7c31a4
API
Packit Service 7c31a4
---
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_signal_init(uv_loop_t* loop, uv_signal_t* signal)
Packit Service 7c31a4
Packit Service 7c31a4
    Initialize the handle.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_signal_start(uv_signal_t* signal, uv_signal_cb cb, int signum)
Packit Service 7c31a4
Packit Service 7c31a4
    Start the handle with the given callback, watching for the given signal.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_signal_start_oneshot(uv_signal_t* signal, uv_signal_cb cb, int signum)
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.12.0
Packit Service 7c31a4
Packit Service 7c31a4
    Same functionality as :c:func:`uv_signal_start` but the signal handler is reset the moment
Packit Service 7c31a4
    the signal is received.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_signal_stop(uv_signal_t* signal)
Packit Service 7c31a4
Packit Service 7c31a4
    Stop the handle, the callback will no longer be called.
Packit Service 7c31a4
Packit Service 7c31a4
.. seealso:: The :c:type:`uv_handle_t` API functions also apply.