当前位置: 代码迷 >> 综合 >> greenplum 背景进程的启动
  详细解决方案

greenplum 背景进程的启动

热度:58   发布时间:2024-01-28 17:58:07.0

gdb 调试命令

gdb postgres
b ServerLoop
run -D "/home/citest/ci_test/data/master/gpseg-1" -p 5432 -E
b reaper
set follow-fork-mode child
c

调用的顺序是
main.c -> PostmasterMain -> ServerLoop -> pthread_sigmask -> StartChildProcess

PostmasterMain 中

  • pqsignal(SIGCHLD, reaper); 注册信号
  • load_auxiliary_libraries 注册启动函数

ServerLoop 中

  • PG_SETMASK 分出子进程处理 SIGCHLD 信号,处理函数是 reaper,在第一次调用时会调用 StartChildProcess 启动各种背景进程

当有子进程挂了,postmaster 会收到 sigchld 信号,调用 reaper 中的 HandleChildCrash,清理所有子进程
在这里插入图片描述
再重新拉起所有子进程
在这里插入图片描述

附:

postmasterMain 进程:在这里插入图片描述