nginx 프로 세 스 관리의 master 프로 세 스
main 함수 에서 nginx 시작 초기 화 과정 을 완 성 했 습 니 다. 시작 초기 화 과정 에서 중요 한 부분 은 설정 파일 을 분석 하고 각 설정 명령 의 리 셋 함 수 를 리 셋 하 는 것 입 니 다. 따라서 각 모듈 의 설정 이 서로 연결 되 었 습 니 다.초기 화 완료 후 ngx 호출master_process_cycle, 이 함수 가 구체 적 으로 무슨 일 을 했 는 지.
sigemptyset(&set);
sigaddset(&set, SIGCHLD);
sigaddset(&set, SIGALRM);
sigaddset(&set, SIGIO);
sigaddset(&set, SIGINT);
sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_NOACCEPT_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_TERMINATE_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_CHANGEBIN_SIGNAL));
if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"sigprocmask() failed");
}
워 커 프로 세 스 를 만 들 때 방 해 받 지 않도록 일련의 신 호 를 차단 합 니 다. ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
ngx_start_worker_processes(cycle, ccf->worker_processes,
NGX_PROCESS_RESPAWN);
ngx_start_cache_manager_processes(cycle, 0);
여기 서 worker 하위 프로 세 스 를 만 들 기 시 작 했 습 니 다. master 프로 세 스 는 이 두 함 수 를 순서대로 호출 하여 하위 프로 세 스 를 만 드 는 것 입 니 다.첫 번 째 호출 함수 가 만 든 하위 프로 세 스 를 worker 프로 세 스 라 고 합 니 다. 두 번 째 호출 함수 가 만 든 것 은 cache 와 관련 된 하위 프로 세 스 입 니 다.요청 을 받 았 습 니 다. 응답 을 마 친 것 은 워 커 프로 세 스 입 니 다. for (i = 0; i < n; i++) {
ngx_spawn_process(cycle, ngx_worker_process_cycle,
(void *) (intptr_t) i, "worker process", type);
ch.pid = ngx_processes[ngx_process_slot].pid;
ch.slot = ngx_process_slot;
ch.fd = ngx_processes[ngx_process_slot].channel[0];
ngx_pass_open_channel(cycle, &ch);
}
여 기 는 n 개의 워 커 프로 세 스 를 순환 적 으로 만 드 는 것 입 니 다. fork 새 프로 세 스 의 구체 적 인 작업 은 ngx 에 있 습 니 다.spawn_process 함수 에서 완성 되 었 습 니 다.전역 배열 ngxprocesses (src / os / unix / ngx process. c), 배열 의 길 이 는 NGXMAX_PROCESSES (기본 값 1024), 저 장 된 요소 유형 은 ngxprocess_t (src / os / uninx / ngx process. h 파일).전역 배열 ngxprocesses 는 pid, channel, 프로 세 스 가 구체 적 인 일 을 하 는 인터페이스 포인터 등 모든 하위 프로 세 스 의 관련 정 보 를 저장 하 는 데 사 용 됩 니 다. 이러한 정 보 는 구조 체 ngx 입 니 다.process_t 로 묘 사 했 어 요.재 ngxspawn_process 가 worker 프로 세 스 를 만 들 고 돌아 오 면 master 프로 세 스 는 worker 프로 세 스 의 pid, worker 프로 세 스 를 ngx 에 있 습 니 다.processes 배열 의 위치 및 channel [0] 은 앞에서 만 든 워 커 프로 세 스 에 전달 하고 다음 워 커 프로 세 스 를 반복 적 으로 만 듭 니 다.channel 은 socketpair 로 만 들 어 졌 으 며 프로 세 스 간 통신 에 사 용 됩 니 다.master 와 worker 프로 세 스, worker 프로 세 스 간 에 이러한 채널 을 통 해 통신 할 수 있 습 니 다.ngx_start_cache_manager_processes 함수 와 start워 커 의 업무 와 관련 이 별로 없다.이 어 master 프로 세 스 는 순환 에 빠 져 워 커 프로 세 스 를 지 키 고 있 습 니 다.master 에서cycle 에서 siguspend 를 호출 했 기 때문에 master 프로 세 스 가 걸 려 서 신호 가 발생 하 기 를 기다 리 고 있 습 니 다 (신 호 를 받 고 신호 처리 함 수 를 호출 하여 해당 하 는 전역 변 수 를 설정 하고 siguspend 함수 가 되 돌아 오 며 전역 변 수 를 판단 하고 해당 하 는 동작 을 취 합 니 다)
if (ngx_quit) {
ngx_signal_worker_processes(cycle,
ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
ls = cycle->listening.elts;
for (n = 0; n < cycle->listening.nelts; n++) {
if (ngx_close_socket(ls[n].fd) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno,
ngx_close_socket_n " %V failed",
&ls[n].addr_text);
}
}
cycle->listening.nelts = 0;
continue;
}
SIGQUIT 신호 에 대한 처리 동작.호출 ngxsignal_worker_processes 함 수 는 모든 워 커 프로 세 스에 SIGQUIT 신 호 를 보 내 워 커 프로 세 스 가 작업 을 종료 하 라 고 알 리 고 모든 감청 소켓 을 닫 습 니 다.contine 을 사용 하 는 것 은 하위 프로 세 스 를 위해 SIGCHLD 신 호 를 master 프로 세 스에 보 내 고 master 프로 세 스 를 뒷수습 하도록 하 는 것 입 니 다. if (ngx_reap) {
ngx_reap = 0;
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap children");
live = ngx_reap_children(cycle);
}
이때, ngxreap 1, master 프로 세 스 호출 ngxreap_children 은 모든 워 커 프로 세 스 를 처리 합 니 다.master 프로 세 스 는 여기까지 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.