我有一个父进程和一个子进程通过管道进行通信。父写子读。此外,一旦孩子完成了阅读,它就会对已经阅读的数据进行一些处理。
我需要确保父节点等待,直到子节点完成对该数据的处理(不终止)。
我只需要在父节点和子节点之间建立一个简单的等待/信号机制。
我相信家长在写完后,可以调用waitpid(child_process_id,&status,flag)。但我不确定子进程如何发出状态更改的信号,以及父进程应该等待什么标志。
感谢您的指点!
最佳答案
您可以使用自定义信号。在这种情况下,子进程使用getppid()
获取其父进程,并通过kill
发送该信号。同时,父节点为特定信号(通过signal
)设置一个信号处理程序,并使用waitpid
等待。由于waitpid
是可中断的,父进程将被通知子进程已经完成,并且如果子进程由于任何原因在不发送信号的情况下死亡,父进程也将停止等待。
或者,只需在父级读取和子级写入处设置第二个管道。父对象只读取其管道末端。子级编写一条短消息(确定或完成)以通知其父级其处理已完成并关闭管道。它的父级得到消息,它知道处理是正确的,如果管道关闭时没有消息,它知道出了问题。嗯,这样设置比较简单。
关于c - 父子信令的waitpid,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42859578/