• Linux孤儿进程与僵尸进程


    1. 基本概念:

    孤儿进程:父进程退出,但是其子进程仍然在运行,那么这些子进程被称为孤儿进程;孤儿进程会被init进程收养,并作善后处理;

    僵尸进程:一个已经终止,但是其父进程尚未对齐进行善后处理的进程被称为僵尸进程;ps命令状态为Z的进程;

    善后处理:内核为每个终止子进程保存了一定量的信息,这些信息至少包括进程ID,该进程的终止状态,以及进程使用的CPU时间总量。如果父进程没有使用wait或者waitpid获取终止子进程有关信息,这些信息将一直保存,直到父进程处理后才能释放它仍占有的资源;

    2. 有何危害:

    孤儿进程:孤儿进程会被init进程收养,并作善后处理,所以孤儿进程并没有危害;

    僵尸进程:如果父进程一直没有执行wait或者waitpid,那么内核将一直保存该子进程的状态信息,如果系统中存在大量的僵尸进程,可能导致可用进程号越来越少,甚至耗尽,所以应当避免僵尸进程的出现;

    3. 解决办法:

    (1) 父进程使用wait或者waitpid等待子进程结束;

    (2) 子进程结束的时候,会向其父进程发送SIGCHLD信号,所以,父进程可以注册SIGHLD信号处理,在处理函数中调用wait或者waitpid;

    (3) fork两次,即fork一次产生子进程,子进程再fork生成孙进程,子进程结束,主进程使用wait或者waitpid等待子进程,而孙进程在其父进程退出后,成为孤儿进程,被init收养;

    另:如果当前系统中有大量僵尸进程,则需要找到其父进程,杀死其父进程,则这些僵尸进程会被init收养并善后;

  • 相关阅读:
    Java代码的执行顺序一
    面试套路-技术需求
    常用数据库的分页实现
    真假分页优缺点
    获取一些系统和用户的通用属性
    反射的使用
    sql复制表数据的方法
    跨服务器的sql使用
    sql 随机数
    常用正则
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/5309367.html
Copyright © 2020-2023  润新知