1

问题:

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

策略一:

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

策略二:

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

结论:

在这一点上,我赞成策略 2,但我想向社区寻求与此方法相关的建议或陷阱。我对策略 1 的理解是否正确,假设我只想知道一个进程的终止而没有别的?另外,我对策略 2 的方法是否过于幼稚,它会消耗我不知道的系统资源吗?

4

1 回答 1

2

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

于 2013-06-30T20:43:57.763 回答