对IsUnderPostmaster变量初步学习
开始
在postmaster.c 中的 BackendStartup 中,有如下的代码:
其中定义了 IsUnderPostmaster=true。
而bgwriter 作为 postmaster 的子进程,它的 IsUnderPostmaster 也是为真。
* BackendStartup -- start backend process** returns: STATUS_ERROR if the fork failed, STATUS_OK otherwise.** Note: if you change this code, also consider StartAutovacuumWorker.*/ static int BackendStartup(Port *port) {Backend *bn; /* for backend cleanup */pid_t pid;/** Create backend data structure. Better before the fork() so we can* handle failure cleanly.*/bn = (Backend *) malloc(sizeof(Backend));if (!bn){ereport(LOG,(errcode(ERRCODE_OUT_OF_MEMORY),errmsg("out of memory")));return STATUS_ERROR;}/** Compute the cancel key that will be assigned to this backend. The* backend will have its own copy in the forked-off process' value of* MyCancelKey, so that it can transmit the key to the frontend.*/MyCancelKey = PostmasterRandom();bn->cancel_key = MyCancelKey;/* Pass down canAcceptConnections state */port->canAcceptConnections = canAcceptConnections();bn->dead_end = (port->canAcceptConnections != CAC_OK &&port->canAcceptConnections != CAC_WAITBACKUP);/** Unless it's a dead_end child, assign it a child slot number*/if (!bn->dead_end)bn->child_slot = MyPMChildSlot = AssignPostmasterChildSlot();elsebn->child_slot = 0;#ifdef EXEC_BACKENDpid = backend_forkexec(port); #else /* !EXEC_BACKEND */pid = fork_process();if (pid == 0) /* child */{free(bn);/** Let's clean up ourselves as the postmaster child, and close the* postmaster's listen sockets. (In EXEC_BACKEND case this is all* done in SubPostmasterMain.)*/IsUnderPostmaster = true; /* we are a postmaster subprocess now */MyProcPid = getpid(); /* reset MyProcPid */MyStartTime = time(NULL);/* We don't want the postmaster's proc_exit() handlers */on_exit_reset();/* Close the postmaster's sockets */ClosePostmasterPorts(false);/* Perform additional initialization and collect startup packet */BackendInitialize(port);/* And run the backend */proc_exit(BackendRun(port));} #endif /* EXEC_BACKEND */if (pid < 0){/* in parent, fork failed */int save_errno = errno;if (!bn->dead_end)(void) ReleasePostmasterChildSlot(bn->child_slot);free(bn);errno = save_errno;ereport(LOG,(errmsg("could not fork new process for connection: %m")));report_fork_failure_to_client(port, save_errno);return STATUS_ERROR;}/* in parent, successful fork */ereport(DEBUG2,(errmsg_internal("forked new backend, pid=%d socket=%d",(int) pid, (int) port->sock)));/** Everything's been successful, it's safe to add this backend to our list* of backends.*/bn->pid = pid;bn->is_autovacuum = false;DLInitElem(&bn->elem, bn);DLAddHead(BackendList, &bn->elem); #ifdef EXEC_BACKENDif (!bn->dead_end)ShmemBackendArrayAdd(bn); #endifreturn STATUS_OK; }
结束
对IsUnderPostmaster变量初步学习相关推荐
- 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助...
初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require( ...
- 关于Unity3D的初步学习研究周记
关于Unity3D的初步学习研究周记(1) 学习总结: 本次学习Unity3D其实算是对基本的复习,因为在以前自己玩过一段时间,我也有一点C#的基础,所以我是直接开始做的一些小测试,因为事件原因,两个 ...
- Ogre个人初步学习总结
Ogre个人初步学习总结 目录 1.开发环境 2.环境配置 2.1Ogre环境配置 2.2ParticleUniverse 环境配置 3.OGRE的学习札记 3.1Ogre的学前准备 3.1.1Ogr ...
- LinQ的初步学习与总结
嘿嘿,说起来ORM和LinQ,就感觉离我好遥远的,在学校是没有学习的,所以总感觉学习了LinQ就是大神,现在嘛,终于也体会一点,感觉LinQ只是初步学习,没有太难,当然以后使用在项目中就没有这样的简单 ...
- MySQL初步学习及实例1
目录 数据库和SQL概述 1.1 数据库简介 1.2 数据库的好处 1.3 数据库相关概念 二.MySQL的卸载与安装 三.MySQL的启动与停止 1.启动 方法一:计算机管理→服务和应用程序→服务→ ...
- java樱花_初步学习java专业课程
初步学习java编程一. 终于触碰到专业课了(有点小兴奋) 计算机语言:人类与计算机交流的语言! 特点:简洁.准确. 计算机语言分为1.二进制语言2.汇编语言3.C/C++{Java之父 Jame ...
- HTMLParser的初步学习
Python的自带模块--HTMLParser的初步学习 HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析. 本文主要简单讲一下HTMLParser的用法. ...
- 初步学习pg_control文件之三
接前文,初步学习pg_control文件之二 继续学习: 研究 DBState,先研究 DB_IN_PRODUCTION ,看它如何出现: 它出现在启动Postmaster时运行的函数处: /* * ...
- eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作
[Java教程]使用eclipse初步学习vue.js操作 0 2017-11-26 19:00:06 一.vue.js的初步认识 https://unpkg.com/vue ">vu ...
最新文章
- Go Pro 半小时上手指南
- tf.reduce_mean tf.reduce_sum优化目标函数时如何选择
- 配置深度学习环境的重要资料
- SpringMVC自定义拦截器与异常处理(自定义异常)
- python中template是什么意思啊_Python中Template使用的一个小技巧
- 电商android studio,谷歌 Android Studio 4.0 Beta 5 发布
- 医药行业数据分析软件(含非付费)--对比分析
- w10系统怎样打开计算机策略,Win10系统组策略在哪里打开
- 产业分析:2021抖音数据报告
- kotlin 开发桌面应用_2020-21年Kotlin应用开发十大公司
- 无人机开发-介绍Mavlink协议的消息组成、如何看懂繁杂的mavlink官网介绍、简单介绍地面站与飞控的通讯流程
- FileChannel阅读笔记
- Linux私房菜--第三章 主机规划和磁盘分区
- SyntaxError: Non-UTF-8 code starting with ‘\xb5‘ in file问题如何解决???求助求助!!!
- 中规中矩的输入两个正整数m和n,求其最大公约数和最小公倍数。
- java代码控制电脑发出警报_java – 如何使用警报构建器对话框显示消息
- Redis学习之publish命令
- 欧洲词典 ABBYY Lingvo European 1.11.0 特别版 Mac 离线翻译软件
- 软RAID 0的技术概要及实现 v0.1b
- conn触发commit的BUG