• Linux下僵尸进程(Zombie process)深入理解


    僵尸进程最核心的问题是:为什么子进程的善后要父进程处理。

    百度百科阐述道,一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构,显然找不到我想要答案。

    维基百科阐述道,On Unix and Unix-like computer operating systems, a zombie process or defunct process is a process that has completed execution but still has an entry in the process table.

    现在我知道了,有个process table需要父进程处理。到底子进程退出时做了哪些事情呢?

    首先,一个进程的结构如下:

       task[]数组中一项,指向了该进程的task_struct和内核堆栈所在页面

          GDT中两项,一项是TSS描述符,一项是LDT描述符

          若干页目录项和若干页表

    进程的占有的资源如下:

          进程拥有的所有物理页面(包括页表和task_struct所占页面)

          进程打开的所有文件

    一个进程结束了,需要做如下的事情:

          释放所有物理页面

          关闭打开的文件

          清除task[]数组中相关项

    如果清除task[]数组中相关相,进程就不可能被调度函数schedule()再次选中了。子进程结束还需要通知父进程,所以最后一项是由父进程处理。所以就是为什么子进程的善后要父进程处理!!父进程正确处理会调用wait/waitpid对子进程进行最后的清除工作。

     

    详细请见http://blog.csdn.net/yming0221/article/details/6334666

     

     

     

  • 相关阅读:
    Mermaid | 强大的画图渲染脚本
    Tools | windows剪切板增强版
    Eclipse | eclipse食用教程
    WebSites | 常用工具网站
    Extensions | Extension && Plugins
    Java | IDE-Eclipse下载安装
    敲个采药玩玩
    今日sb题之 sdnuoj 1064
    stl概述
    给定 n 个字符串,求有多少字符串是其他字符串的前缀。
  • 原文地址:https://www.cnblogs.com/smallmaple/p/2883712.html
Copyright © 2020-2023  润新知