开始

在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变量初步学习相关推荐

  1. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助...

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require( ...

  2. 关于Unity3D的初步学习研究周记

    关于Unity3D的初步学习研究周记(1) 学习总结: 本次学习Unity3D其实算是对基本的复习,因为在以前自己玩过一段时间,我也有一点C#的基础,所以我是直接开始做的一些小测试,因为事件原因,两个 ...

  3. Ogre个人初步学习总结

    Ogre个人初步学习总结 目录 1.开发环境 2.环境配置 2.1Ogre环境配置 2.2ParticleUniverse 环境配置 3.OGRE的学习札记 3.1Ogre的学前准备 3.1.1Ogr ...

  4. LinQ的初步学习与总结

    嘿嘿,说起来ORM和LinQ,就感觉离我好遥远的,在学校是没有学习的,所以总感觉学习了LinQ就是大神,现在嘛,终于也体会一点,感觉LinQ只是初步学习,没有太难,当然以后使用在项目中就没有这样的简单 ...

  5. MySQL初步学习及实例1

    目录 数据库和SQL概述 1.1 数据库简介 1.2 数据库的好处 1.3 数据库相关概念 二.MySQL的卸载与安装 三.MySQL的启动与停止 1.启动 方法一:计算机管理→服务和应用程序→服务→ ...

  6. java樱花_初步学习java专业课程

    初步学习java编程一. 终于触碰到专业课了(有点小兴奋) 计算机语言:人类与计算机交流的语言! 特点:简洁.准确. 计算机语言分为1.二进制语言2.汇编语言3.C/C++{Java之父   Jame ...

  7. HTMLParser的初步学习

    Python的自带模块--HTMLParser的初步学习 HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析. 本文主要简单讲一下HTMLParser的用法. ...

  8. 初步学习pg_control文件之三

    接前文,初步学习pg_control文件之二 继续学习: 研究 DBState,先研究 DB_IN_PRODUCTION ,看它如何出现: 它出现在启动Postmaster时运行的函数处: /* * ...

  9. eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作

    [Java教程]使用eclipse初步学习vue.js操作 0 2017-11-26 19:00:06 一.vue.js的初步认识 https://unpkg.com/vue ">vu ...

最新文章

  1. Go Pro 半小时上手指南
  2. tf.reduce_mean tf.reduce_sum优化目标函数时如何选择
  3. 配置深度学习环境的重要资料
  4. SpringMVC自定义拦截器与异常处理(自定义异常)
  5. python中template是什么意思啊_Python中Template使用的一个小技巧
  6. 电商android studio,谷歌 Android Studio 4.0 Beta 5 发布
  7. 医药行业数据分析软件(含非付费)--对比分析
  8. w10系统怎样打开计算机策略,Win10系统组策略在哪里打开
  9. 产业分析:2021抖音数据报告
  10. kotlin 开发桌面应用_2020-21年Kotlin应用开发十大公司
  11. 无人机开发-介绍Mavlink协议的消息组成、如何看懂繁杂的mavlink官网介绍、简单介绍地面站与飞控的通讯流程
  12. FileChannel阅读笔记
  13. Linux私房菜--第三章 主机规划和磁盘分区
  14. SyntaxError: Non-UTF-8 code starting with ‘\xb5‘ in file问题如何解决???求助求助!!!
  15. 中规中矩的输入两个正整数m和n,求其最大公约数和最小公倍数。
  16. java代码控制电脑发出警报_java – 如何使用警报构建器对话框显示消息
  17. Redis学习之publish命令
  18. 欧洲词典 ABBYY Lingvo European 1.11.0 特别版 Mac 离线翻译软件
  19. 软RAID 0的技术概要及实现 v0.1b
  20. conn触发commit的BUG

热门文章

  1. 激动人心的AutoCAD .net开发技术
  2. QuickBI助你成为分析师——数据源FAQ小结
  3. 判断是否移动端设备的JS代码,超短,百度都用它
  4. Windows 10离线安装.NET Framework 3.5
  5. 谷歌邮箱上不了的情况下怎么登录谷歌邮箱
  6. 异常The Struts dispatcher cannot be found. This is
  7. win7完美兼容DynamipsGUI(小凡模拟器)攻略
  8. BFD与IGP快速收敛应用测试
  9. 用零知识证明解决投票安全
  10. im和音视频开发哪个更好_找时间成为更好的开发人员