Postgresql - 源码 - 数据库启动 -StartChildProcess

本文解析了PostgreSQL数据库启动时子进程的启动流程,详细介绍了如何通过StartChildProcess函数启动如bgwriter、walwriter、walreceiver等关键子进程,并阐述了这些进程在数据库运行中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动其他子进程。such as the bgwriter, walwriter, walreceiver, bootstrapper and the shared memory checker code.

 

包括 src/backend/postmaster/postmaster.c 中的

#define StartupDataBase()       StartChildProcess(StartupProcess)

#define StartBackgroundWriter() StartChildProcess(BgWriterProcess)

#define StartCheckpointer()     StartChildProcess(CheckpointerProcess)

#define StartWalWriter()        StartChildProcess(WalWriterProcess)

#define StartWalReceiver()      StartChildProcess(WalReceiverProcess)

 

1. 在数据库进行检查(权限,文件,文件夹等)之后,会先进行 StartupDataBase(),启动数据库进程。

 

2. 随后,运行ServerLoop() 函数, 其他的子进程会被启动。(ServerLoop函数具体位置请参考数据库启动-backend启动)

 

函数位置

src/backend/postmaster/postmaster.c StartChildProcess(AuxProcType type) --> AuxiliaryProcessMain

backend/bootstrap/bootstrap.c AuxiliaryProcessMain(int argc, char *argv[]) --> StartupProcessMain

src/backend/postmaster/startup.c StartupProcessMain(void)

 

    if (IsUnderPostmaster)

    {

        const char *statmsg;

 

        switch (MyAuxProcType)

        {

            case StartupProcess:

                statmsg = pgstat_get_backend_desc(B_STARTUP);

                break;

            case BgWriterProcess:

                statmsg = pgstat_get_backend_desc(B_BG_WRITER);

                break;

            case CheckpointerProcess:

                statmsg = pgstat_get_backend_desc(B_CHECKPOINTER);

                break;

            case WalWriterProcess:

                statmsg = pgstat_get_backend_desc(B_WAL_WRITER);

                break;

            case WalReceiverProcess:

                statmsg = pgstat_get_backend_desc(B_WAL_RECEIVER);

                break;

            default:

                statmsg = "??? process";

                break;

        }

 

所有进程启动完成。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值