waitpid用于父子信令

时间:2017-03-17 14:02:29

标签: c linux embedded-linux

我有一个父和一个子进程通过管道进行通信。家长写和孩子读。此外,一旦孩子完成阅读,它会对已阅读的数据进行一些处理。 我需要确保父级等待孩子完成对此数据的处理(不终止)。

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

我相信父母在写完之后可以调用waitpid(child_process_id,& status,flag)。但是我不确定孩子如何能够改变状态,以及父母应该等待什么标志。

会欣赏任何指针!

1 个答案:

答案 0 :(得分:0)

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

或者,只需设置父读取和子写入的第二个管道。父母只是读取它的管道末端。孩子写一条短信(OK或DONE)通知其父母其处理已完成并关闭管道。它父获取消息,它知道处理是正确的,如果管道没有消息关闭,它知道出了问题。恕我直言,这设置起来比较简单。