2017-03-17 58 views
1

我有一个父级和子级进程通过管道进行通信。家长写和孩子读。而且,一旦孩子读完了,它会对已读取的数据进行一些处理。 我需要确保父级等待孩子完成其数据处理(未终止)。waitpid亲子信号

我需要的只是父母和孩子之间的一个简单的等待/信号机制。

我相信父母在完成写作后可以调用waitpid(child_process_id,& status,flag)。但我不确定孩子如何能够发出状态改变的信号,以及父母等待的标志。

会欣赏任何指针!

回答

0

您可以使用自定义信号。在那种情况下,孩子使用getppid()来获得其父母进程并通过kill发送该信号。与此同时,父设置特定信号的信号处理程序(通过signal),并使用waitpid等待。由于waitpid是可中断的,因此会通知家长该孩子已完成处理,并且如果孩子因任何原因死亡而不发送信号,该孩子也将停止等待。

或者,只需在父节点和子节点写入位置设置第二个管道。父母只是读取其管道末端。孩子写一条短消息(OK或DONE)来通知其父母其处理已完成并关闭管道。它的父母得到消息,它知道处理是正确的,如果管道关闭没有消息,它知道有什么问题。恕我直言,这是更简单的设置。