C / C ++事件驱动监视非子程序的终止

时间:2013-06-30 20:19:09

标签: c++ c sockets signals pipe

问题:

我需要知道进程何时终止 - 只知道它的PID。但是,我也有能力修改所涉及的所有过程的来源,所以理论上我可以做任何我需要的事情。欢迎所有“有效”的想法。

策略1:

我研究过select()pselect()poll()ppoll()epoll()。我的理解是,我必须为每个要监视的进程连接一个套接字,以获取文件描述符。然后我需要使用零超时值来实际轮询正在运行的进程,以查看套接字是否可用于读取,以便知道它是活还是死。

策略2:

如果我在监控守护程序和其他进程之间创建多个管道,我可以写入管道,但是从不在另一端读取并等待并处理SIGPIPE信号吗?

结论:

此时,我赞成策略2,但我想向社群询问与此方法相关的建议或陷阱。我对策略1的理解是否正确,假设我只想了解流程的终止而没有其他内容?另外,我对策略2的方法是否过于幼稚,是否会消耗我不知道的系统资源?

1 个答案:

答案 0 :(得分:2)

让您的监视器创建一个Unix域套接字,每个受监视的进程都可以连接到该套接字。如果将这些套接字描述符传递给poll且未在pollfd结构中设置事件,则当其中一个受监视的进程退出且其套接字关闭时,您将收到POLLHUP个事件。