Linux signalfd 原理( 三 )


...
return events;
}
 该函数的操作就是把 wait对象直接挂到当前进程的信号等待队列signalfd_wqh 中,对比 timerfd 来讲,区别在于 timerfd 的 wait 对象是挂到 timerfd_ctx->wqh 链表中 。(详情参看定时器timerfd原理)
 
signalfd 与 epoll 的结合
 

  • 当 epoll_ctl 调用 signalfd_poll 时,会把生成的 wait 对象挂到当前进程的信号等待队列 signalfd_wqh 中,其中 wait 的回调函数为ep_poll_callback  。
  • 当触发信号时,内核会遍历 signalfd_wqh 上的 wait 对象,然后调用回调函数 ep_poll_callback,在该回调函数中会把触发的事件发送到用户态,然后唤醒由于调用 epoll_wait 而休眠的进程,唤醒后的进程调调用 ead 去取信号 。




推荐阅读