코드 위치 (v16.4)
- File path
src/backend/postmaster/postmaster.c
- Line:
4116
- Link: BackendStartup()
Overview
- Postmaster 에서 Backend process 를 fork 하는 함수이다.
Line ref
- L4121-L4132: Backend 구조체를 생성한다.
- L4134-L4163: Random cancel key 를 생성하는 등의 Backend 구조체를 초기화한다.
- L4165-L4168:
fork()
로 backend process 를 fork 한다.4166
: 여기의backend_forkexec()
은 Windows 운영체제에는fork()
syscall 이 없기 때문에 해당 기능을 수행해 주는 함수라고 생각하면 된다.
- L4169-L4193:
fork()
된 child process (즉,pid
가0
) 에서의 logic 이다.4168-4177
: Backend 는 postmaster 와 별개의 process 이기 때문에 postmaster 가 사용하던 자원들을 정리해 준다4179-4192
: Backend initiation 작업을 해주고 BackendRun 으로 backend 를 시작한다.
- L4196-L4209:
fork()
한 parent process 에서의 logic 인데,fork()
를 실패했을 때의 logic 이다 (즉,pid
가 음수).- 여기서는 뭐 error message 를 출력하고
STATUS_ERROR
를 return 하는 것으로 끝난다.
- 여기서는 뭐 error message 를 출력하고
- L4211-L4229: 여기는 parent process 에서
fork()
에 성공했을 때의 logic 이다 (즉,pid
가 양수).4211-4214
: Log message 출력4216-4222
:4121
번째 줄에서 생성한Backend
구조체의 값들을 설정해주고4224-4227
: 그 구조체를 array 에 추가한다.- 이것은 모든 Backend process 를 Postmaster process 에서 관리하기 위함이다.
- Postmaster 는 이 주소공간을 통해 문제가 생긴 backend process 를 정리해주는 작업을 하되,
- 정상적인 경우에는 이 주소공간을 절대 건드리지 않는다.