SIGCHLD -- 2




守护过程接下来,master 进程就要正式开始发挥他作为一个 daemon 进程的责任了,陷入循环,等待信号发生,做出相应处理ngx_new_binary = 0; delay = 0; sigio = 0; live = 1; for ( ;; ) { // 设定定时器,worker 定时退出 if (delay) { if (ngx_sigalrm) { sigio = 0; delay *= 2; ngx_sigalrm = 0; } ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "termination cycle: %d", delay); itv.it_interval.tv_sec = 0; itv.it_interval.tv_usec = 0; itv.it_value.tv_sec = delay / 1000; itv.it_value.tv_usec = (delay % 1000 ) * 1000; // 设定精确的定时功能,以系统时间计算 if (setitimer(ITIMER_REAL, &itv, NULL) == -1) { ngx_log_erro
#技术帖    #network    #龙潭书斋    #进程   
概念又称僵尸进程,在子进程退出时,会将子进程的有关信息发送给父进程,让其父进程对其进行善后处理(如释放他仍占用的资源),如果他的父进程没有对 SIGCHLD 做出响应或忽略该信号或调用 waitpid 等待子进程结束,则子进程无法正常结束而成为僵死进程,即使是 root 身份调用 kill -9 命令也不能杀死僵死进程 将死进程通过 ps 命令查看其标志为 Z 避免产生僵死进程的方法1、waitpid子进程死后,会发送 SIGCHLD 信号给父进程,父进程收到此信号后会执行 waitpid 函数为子进程收尸2、处理 SIGCHLD 信号父进程可以对 SIGCHLD 信号进行响应,在处理函数中执行默认的处理或显示忽略该信号,则系统会自动释放子进程资源而避免使子进程成为僵死进程3、杀死父进程由于父进程死后,子进程以及僵死进程会成为孤儿进程,会被过继给守护进程(pid为1的init进程),init进程会负责清理僵死进程4、fork 两次在建立子进程时,使用2次fork,让所建立的子进程成为父进程的孙子进程,而实际中的子进程则随即推出,和第三条相同,由于孙子进程的
#技术帖    #linux    #unix    #apue   



京ICP备2021035038号