# gevent

# `gevent.signal` – Cooperative implementation of special cases of `signal.signal()`

Cooperative implementation of special cases of `signal.signal()`.

This module is designed to work with libev’s child watchers, as used by default in `gevent.os.fork()` Note that each `SIGCHLD` handler will be run in a new greenlet when the signal is delivered (just like `gevent.hub.signal`)

The implementations in this module are only monkey patched if `gevent.os.waitpid()` is being used (the default) and if `signal.SIGCHLD` is available; see `gevent.os.fork()` for information on configuring this not to be the case for advanced uses.

New in version 1.1b4.

Changed in version 1.5a4: Previously there was a backwards compatibility alias `gevent.signal`, introduced in 1.1b4, that partly shadowed this module, confusing humans and static analysis tools alike. That alias has been removed. (See `gevent.signal_handler`.)

getsignal(signalnum)

  Exactly the same as `signal.getsignal()` except where `signal.SIGCHLD` is concerned.

  For `signal.SIGCHLD`, this cooperates with `signal()` to provide consistent answers.

signal(signalnum, handler)

  Exactly the same as `signal.signal()` except where `signal.SIGCHLD` is concerned.

  Note

  A `signal.SIGCHLD` handler installed with this function will only be triggered for children that are forked using `gevent.os.fork()` (`gevent.os.fork_and_watch()`); children forked before monkey patching, or otherwise by the raw `os.fork()`, will not trigger the handler installed by this function. (It’s unlikely that a SIGCHLD handler installed with the builtin `signal.signal()` would be triggered either; libev typically overwrites such a handler at the C level. At the very least, it’s full of race conditions.)

  Note

  Use of `SIG_IGN` and `SIG_DFL` may also have race conditions with libev child watchers and the `gevent.subprocess` module.

  Changed in version 1.2a1: If `SIG_IGN` or `SIG_DFL` are used to ignore `SIGCHLD`, a future use of `gevent.subprocess` and libev child watchers will once again work. However, on Python 2, use of `os.popen` will fail.

  Changed in version 1.1rc2: Allow using `SIG_IGN` and `SIG_DFL` to reset and ignore `SIGCHLD`. However, this allows the possibility of a race condition if `gevent.subprocess` had already been used.

Next page: `gevent.subprocess` – Cooperative `subprocess` module