父子信号的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的主要内容,如果未能解决你的问题,请参考以下文章

重识Nginx - 15 使用信号管理Nginx的父子进程

重识Nginx - 15 使用信号管理Nginx的父子进程

nginx中父子进程工作的主体函数

进程和信号

QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化

Posix共享内存