代码之家  ›  专栏  ›  技术社区  ›  doron

监视epoll循环中的线程终止

  •  0
  • doron  · 技术社区  · 3 年前

    在linux中,如何生成一个事件来在线程终止时中断select/poll/epoll循环?流程具有 pidfd SIGCHILD 。螺纹有类似的东西吗?

    编辑:这是为了直接监视线程终止事件。

    1 回复  |  直到 3 年前
        1
  •  2
  •   Sam Varshavchik    3 年前

    想到的最明显的解决方案是,被轮询/选择的文件描述符之一将是一个非常特殊的文件描述符,它是为特定目的保留的。当你想“突破”select/poll/epoll时,你只需要对这个非常特殊的文件描述符进行适当的安排,就可以进行读取,这就会实现。

    在select/poll/epoll返回后,您将检查该文件描述符,就像检查任何其他描述符一样,并根据该事件中发生的任何情况进行处理。因此,这个问题剩下的唯一部分是,这将是一个什么样的非常特殊的文件描述符?

    好吧,既然你用标记了你的问题 linux ,您有许多特定于Linux的选项可供选择。

    您可以在流程中关闭本机信号处理,并且 create a signal file descriptor 然后,发送到进程的信号转换为信号文件描述符可供读取,并从中读取,如手册页中所述,告诉您信号已被接收。

    event file descriptor 可能是另一种选择,这种方式更适合同一进程中的不同线程相互通知。

    事件和信号文件描述符都是可轮询/可选择的。而且总是有一种老派的方法来创建 pipe() ,选择/轮询管道的读取端,并写入管道的写入端以实现通知。