符合POSIX的系统中的select
调用在执行非阻塞I / O时非常有用,它使文件描述符何时为I / O操作“就绪”。 waitpid
系统调用有什么类似的东西吗?我知道人们可以使用WNOHANG
标志来使单个waitpid
调用成为非阻塞,就像人们可以使用MSG_DONTWAIT
标志使单个recvfrom
套接字调用成为非阻塞一样。封锁。但是,有时select
提供的超时功能更为方便,并且可以避免循环尽快循环调用recvfrom
。 select
还允许一个人同时监视多个文件描述符。类似Unix的系统(或专用于Linux)提供的功能是否具有监视子进程的类似功能?
我将详细介绍Craig Estey提出的可能性,并将signalfd放入混音中。
不是为信号处理程序SIGCHLD设置信号处理程序,而是将signalfd设置为执行此工作。这样,您将拥有一个文件描述符,该文件描述符将在发出SIGCHLD信号后准备就绪,然后可以使用select()等待超时。
我已经使用signalfd作为捕获信号已有相当长的时间了。它是特定于Linux的(可以通过在问题上附加的标签来确定!),并且在执行主线程的上下文中处理信号要容易得多,而不是受限于常规操作中可以做的事情。信号处理程序。对信号的响应时间可能不会那么快,但是如果应用程序已经具有诸如select或poll或zmq_poll之类的反应堆,或者实际上是任何GUI框架的事件循环处理程序的任何fd输入,它都将变得非常容易。