用于监视子进程的select()的模拟?

问题描述 投票:1回答:1

符合POSIX的系统中的select调用在执行非阻塞I / O时非常有用,它使文件描述符何时为I / O操作“就绪”。 waitpid系统调用有什么类似的东西吗?我知道人们可以使用WNOHANG标志来使单个waitpid调用成为非阻塞,就像人们可以使用MSG_DONTWAIT标志使单个recvfrom套接字调用成为非阻塞一样。封锁。但是,有时select提供的超时功能更为方便,并且可以避免循环尽快循环调用recvfromselect还允许一个人同时监视多个文件描述符。类似Unix的系统(或专用于Linux)提供的功能是否具有监视子进程的类似功能?

c linux multithreading unix nonblocking
1个回答
0
投票

我将详细介绍Craig Estey提出的可能性,并将signalfd放入混音中。

不是为信号处理程序SIGCHLD设置信号处理程序,而是将signalfd设置为执行此工作。这样,您将拥有一个文件描述符,该文件描述符将在发出SIGCHLD信号后准备就绪,然后可以使用select()等待超时。

我已经使用signalfd作为捕获信号已有相当长的时间了。它是特定于Linux的(可以通过在问题上附加的标签来确定!),并且在执行主线程的上下文中处理信号要容易得多,而不是受限于常规操作中可以做的事情。信号处理程序。对信号的响应时间可能不会那么快,但是如果应用程序已经具有诸如select或poll或zmq_poll之类的反应堆,或者实际上是任何GUI框架的事件循环处理程序的任何fd输入,它都将变得非常容易。

© www.soinside.com 2019 - 2024. All rights reserved.