C++ Linux,C++;管道和分叉(超时和读取)

C++ Linux,C++;管道和分叉(超时和读取),c++,linux,pipe,fork,C++,Linux,Pipe,Fork,我有一个父进程,它启动一个子进程(使用fork),不断地将大量数据输出到std::cout 这个孩子创建了很多数据,所以我想不断地调用read(),这样我就能得到这些数据(根据文档,如果管道满了,孩子就会阻塞)。我还想在一段时间后杀死这个孩子 为了实现上述目标,父进程将派生另一个子进程,该子进程基本上调用sigtimedwait,并在超时时间过后终止第一个子进程。同时,父级将调用read()从第一个子级获取数据 这很好,除了一个大问题外,当超时时间过去(在超时过程中)并发出sigkill时,父函

我有一个父进程,它启动一个子进程(使用fork),不断地将大量数据输出到std::cout

这个孩子创建了很多数据,所以我想不断地调用read(),这样我就能得到这些数据(根据文档,如果管道满了,孩子就会阻塞)。我还想在一段时间后杀死这个孩子

为了实现上述目标,父进程将派生另一个子进程,该子进程基本上调用sigtimedwait,并在超时时间过后终止第一个子进程。同时,父级将调用read()从第一个子级获取数据

这很好,除了一个大问题外,当超时时间过去(在超时过程中)并发出sigkill时,父函数在read()函数调用上永远被阻止!!!(我假设这是因为管道未关闭)

我有两个问题

  • 这是在Linux中实现我的目标的正确方法吗?(即实施超时机制并“实时”读取数据)
  • 如果是,我如何解决上述问题

  • 谢谢

    “我想我有两个问题。”你有没有问题?需要MCVE?根据描述,当第一个孩子被杀时,其管道末端应该关闭,这将导致管道另一端出现EOF。有可能父级没有正确地关闭管道写入端的句柄。@DanielSchepler如果您是正确的,这就解决了问题!谢谢有没有更有效的方法来做我在问题中描述的事情?生成两个进程对我来说似乎效率低下。