Libevent 是一个轻量级的开源高性能网络库,事件驱动(event-driven), 实现基于 Reactor 模式,网上学习资料众多,这里分享一下关于 signal 的处理。
首先给出 libevent 对 signal 的处理宏定义:
evsignal_* macros Aliases for working with signal events #define evsignal_add(ev, tv) event_add((ev), (tv)) #define evsignal_assign(ev, b, x, cb, arg) \ event_assign((ev), (b), (x), EV_SIGNAL|EV_PERSIST, cb, (arg)) #define evsignal_new(b, x, cb, arg)\ event_new((b), (x), EV_SIGNAL|EV_PERSIST, (cb), (arg)) #define evsignal_del(ev) event_del(ev) #define evsignal_pending(ev, tv) event_pending((ev), EV_SIGNAL, (tv)) #define evsignal_initialized(ev) event_initialized(ev)
signal 事件的处理函数即是普通 event 事件的处理函数别无二致,唯一不同之处在于在文件描述符,signal 事件该参数的意义是 signal no,我们可以用 kill -l 命令查看系统的 signal table: