A signal manager keeps track of a set of signals to be managed and the signal handlers for them. When a signal manager is managing a signal, it installs its own OCaml handler for that signal that records delivery of the signal. It then later, upon request, will deliver the signal to all its handlers.
Once a signal manager starts managing a signal, it never stops.
create creates and returns a signal manager t. Whenever a signal that t is
managing is delivered, it will call thread_safe_notify_signal_delivered from within
the OCaml signal handler. Therefore thread_safe_notify_signal_delivered must be
thread safe.
manage t signal causes t to manage signal, thus overriding
default_sys_behavior for that signal, and any other OCaml handler for that
signal.
install_handler t signals f causes t to manage the handling of signals, and
registers f to run on every signal in signals that is delivered. It is an
error if f ever raises when it is called.
handle_delivered t runs all signal handlers on the signals that have been
delivered but not yet handled.