uv_signal_t --- 信号句柄

信号句柄在按事件循环的基础上实现了Unix风格的信号处理。

在Windows上模拟了一些信号的接收:

  • SIGINT 通常在用户按 CTRL+C 时被发送。 然而,如同在Unix上,当终端原始模式开启时这无法保证。
  • SIGBREAK 在用户按 CTRL + BREAK 时被发送。
  • SIGHUP 在用户关闭终端窗口时被生成。 在SIGHUP时给予程序大约10秒执行清理。 在那之后Windows将会无条件地终止程序。
  • 对其他类型的信号的监视器能被成功地创建,但是这些信号永远不会被接收到。 这些信号是: SIGILLSIGABRTSIGFPESIGSEGVSIGTERMSIGKILL
  • 通过编程方式调用 raise() 或 abort() 发出一个信号不会被libuv检测到; 这些信号将不会触发信号监视器。

注解

在Linux上 SIGRT0 和 SIGRT1 (信号32和33)用于NPTL线程库来管理线程。 对这些信号安装监视器将会导致无法预测的行为并且强烈不推荐。 libuv未来的版本中可能会直接拒绝它们。

在 1.15.0 版更改: 在Windows上改进对 SIGWINCH 的支持。

数据类型

uv_signal_t

信号句柄类型。

void (*uv_signal_cb)(uv_signal_t* handle, int signum)

传递给 uv_signal_start() 的回调函数的类型定义。

公共成员

int uv_signal_t.signum

被这个句柄监视的信号。 只读。

参见

uv_handle_t 的成员也适用。

API

int uv_signal_init(uv_loop_t* loop, uv_signal_t* signal)

初始化句柄。

int uv_signal_start(uv_signal_t* signal, uv_signal_cb cb, int signum)

以给定的回调函数开始句柄,监视给定的信号。

int uv_signal_start_oneshot(uv_signal_t* signal, uv_signal_cb cb, int signum)

1.12.0 新版功能.

uv_signal_start() 同样的功能,但是信号句柄在接受到信号的时刻被重置。

int uv_signal_stop(uv_signal_t* signal)

停止句柄,回调函数将不会再被调用。

参见

uv_handle_t 的API函数也适用。