通讯架构实战——4-5 信号,子进程实战,文件IO详谈-2

一:守护进程功能的实现
    三章二节  
       (1)拦截掉SIGHUP,那么终端窗口关闭,进程就不会跟着关闭
       (2)守护进程,三章七节,一运行就在后台,不会占着终端。
    创建守护进程ngx_daemon();
    调用ngx_daemon()的时机: worker()子进程创建之前;
    ps -eo pid,ppid,sid,tty,pgrp,comm,stat,cmd | grep -E 'bash|PID|nginx'
    (1)一个master,4个worker进程,状态S,表示休眠状态,但没有+,+号表示位于前台进程组,没有+说明我们这几个进程不在前台进程组;
    (2)master进程的ppid是1【老祖宗进程init】,其他几个worker进程的父进程都是master;
    (3)tt这列都为?,表示他们都脱离了终端,不与具体的终端挂钩了
    (4)他们的进程组PGRP都相同;
    
    结论:
    1)守护进程如果通过键盘执行可执行文件来启动,那虽然守护进程与具体终端是脱钩的,但是依旧可以往标准错误上输出内容,这个终端对应的屏幕上可以看到输入的内容;
    2)但是如果这个nginx守护进程你不是通过终端启动,你可能开机就启动,那么这个nginx守护进程就完全无法往任何屏幕上显示信息了,这个时候,要排错就要靠日志文件了;

 二:信号处理函数的进一步完善
    (2.1)避免子进程被杀掉时变成僵尸进程
    父进程要处理SIGCHILD信号并在信号处理函数中调用waitpid()来解决僵尸进程的问题;
    信号处理函数中的代码,要坚持一些书写原则:
    a)代码尽可能简单,尽可能快速的执行完毕返回;
    b)用一些全局量做一些标记;尽可能不调用函数;
    c)不要在信号处理函数中执行太复杂的代码以免阻塞其他信号的到来,甚至阻塞整个程序执行流程;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值