zoukankan      html  css  js  c++  java
  • 多进程问题

    一、概述

      孤儿进程:父进程退出,而它的子进程仍在运行,那么这些子进程将成为孤儿进程,孤儿进程将被init进程(进程id)为收养,并由init进程对它们完成状态的收集工作

      僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程

    二、如何避免出现僵尸进程

    • 通过signal(SIGCHLD, SIG_IGN)通知内核对子进程的结束不关心,由内核回收
    • 通过SIGCHLD的注册函数来处理信号,如果一下子很多信号发出,那么会有丢失信号的问题,因为内核发信号不排队....
    • 孤儿进程的方式,通过fork setsid实现

    三、Daemon守护进程

    1. fork子进程、然后父进程退出,这已经构成了基本的daemon,但子进程还在父进程的回话里面
    2. 子进程调用setsid,使子进程成为新的会话组长,但新的会话组长可申请控制终端
    3. 再次fork一个子孙进程,干掉子进程,保留孙子进程
    4. 切换工作目录,关闭stdinstdoutstderr的句柄,umask  
  • 相关阅读:
    CF1066D Boxes Packing
    luogu P2508 [HAOI2008]圆上的整点
    luogu P2502 [HAOI2006]旅行
    luogu P2511 [HAOI2008]木棍分割
    luogu P4161 [SCOI2009]游戏
    luogu P4160 [SCOI2009]生日快乐
    windows2012系统IE浏览器无法打开加载flashplayer内容
    kvm虚拟机相关
    esxI开启虚拟化
    Termux 详细安装
  • 原文地址:https://www.cnblogs.com/chris-cp/p/5993311.html
Copyright © 2011-2022 走看看