父子信号的waitpid
Posted
技术标签:
【中文标题】父子信号的waitpid【英文标题】:waitpid for parent-child signalling 【发布时间】:2017-03-17 14:02:29 【问题描述】:我有一个父进程和一个子进程通过管道进行通信。父母写,孩子读。而且,一旦孩子读完了,它会对已经读过的数据做一些处理。 我需要确保父母等到孩子完成对这些数据的处理(而不是终止)。
我只需要一个简单的父母和孩子之间的等待/信号机制。
我相信父母在写完之后可以调用waitpid(child_process_id, &status, flag)。但我不确定孩子如何发出状态变化的信号,以及父母应该等待什么标志。
将不胜感激任何指针!
【问题讨论】:
【参考方案1】:您可以使用自定义信号。在这种情况下,子进程使用getppid()
获取其父进程并通过kill
向其发送该信号。同时,父级为特定信号设置一个信号处理程序(通过signal
)并使用waitpid
等待。由于waitpid
是可中断的,因此父级将被通知子级已完成处理,并且如果子级因任何原因没有发送信号而死亡,也会停止等待。
或者,只需设置第二个管道,父级读取和子级写入。父级只需读取其管道末端。子进程写一条短消息(OK 或 DONE)通知其父进程其处理已完成并关闭管道。它的父母收到消息,它知道处理是正确的,如果管道在没有消息的情况下关闭,它就知道出了问题。恕我直言,这更容易设置。
【讨论】:
以上是关于父子信号的waitpid的主要内容,如果未能解决你的问题,请参考以下文章
QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化