为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 数据库 正文

PostgreSQL数据库进程——InitPostmasterDeathWatchHandle

三叶资源网 2022-08-21 21:18:50 数据库 194 ℃ 0 评论

InitPostmasterDeathWatchHandle函数初始化仅仅一个句柄用于监控postmaster death。在postmaster中调用,这样子进程在父进程挂掉之后才能监控到(subsequently monitor)。创建postmaster_alive_fds管道,postmaster拥有管道的写端,子进程拥有管道的读端。子进程可以将读端的文件描述符传递到select中在postmaster die后唤醒,或者通过read函数返回0来检查postmaster death。子进程必须在forking之后立刻关闭该管道的写端(只有在所有子进程关闭了写端之后,EOF在read端才会有信号,EOF won’t be signaled in the read end until all processes have closed the write fd)

static void InitPostmasterDeathWatchHandle(void){

/* Create a pipe. Postmaster holds the write end of the pipe open

* (POSTMASTER_FD_OWN), and children hold the read end. Children can pass

* the read file descriptor to select() to wake up in case postmaster

* dies, or check for postmaster death with a (read() == 0). Children must

* close the write end as soon as possible after forking, because EOF

* won't be signaled in the read end until all processes have closed the

* write fd. That is taken care of in ClosePostmasterPorts(). */

Assert(MyProcPid == PostmasterPid);

if (pipe(postmaster_alive_fds) < 0)

ereport(FATAL,

(errcode_for_file_access(),

errmsg_internal("could not create pipe to monitor postmaster death: %m")));

/*

* Set O_NONBLOCK to allow testing for the fd's presence with a read()

* call.

*/

if (fcntl(postmaster_alive_fds[POSTMASTER_FD_WATCH], F_SETFL, O_NONBLOCK) == -1)

ereport(FATAL,

(errcode_for_socket_access(),

errmsg_internal("could not set postmaster death monitoring pipe to nonblocking mode: %m")));

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
哈罗单车Exdui界面Sqlite3数据库操作类QQ看点评论鱼刺通用架构EXUI易语言视频教程编辑框上传通信开源数据加密模块模拟红绿灯文本颜色注册美团源码注释自动检查更新鼠标连发网页解析库变量数据交换失败代码
最新评论