问题:
我需要知道进程何时终止 - 只知道它的PID。但是,我也有能力修改所涉及的所有过程的来源,所以理论上我可以做任何我需要的事情。欢迎所有“有效”的想法。
策略1:
我研究过select()
,pselect()
,poll()
,ppoll()
,epoll()
。我的理解是,我必须为每个要监视的进程连接一个套接字,以获取文件描述符。然后我需要使用零超时值来实际轮询正在运行的进程,以查看套接字是否可用于读取,以便知道它是活还是死。
策略2:
如果我在监控守护程序和其他进程之间创建多个管道,我可以写入管道,但是从不在另一端读取并等待并处理SIGPIPE
信号吗?
结论:
此时,我赞成策略2,但我想向社群询问与此方法相关的建议或陷阱。我对策略1的理解是否正确,假设我只想了解流程的终止而没有其他内容?另外,我对策略2的方法是否过于幼稚,是否会消耗我不知道的系统资源?
答案 0 :(得分:2)
让您的监视器创建一个Unix域套接字,每个受监视的进程都可以连接到该套接字。如果将这些套接字描述符传递给poll
且未在pollfd
结构中设置事件,则当其中一个受监视的进程退出且其套接字关闭时,您将收到POLLHUP
个事件。