• linux zombie process相关学习


    1. zombie process是什么?

    zombie process是那些在系统中已经死掉的process,

    通过ps -A | grep defunct可以查看系统中有多少zombie process。

    2. zombie process是如何产生的?

    当一个process被kill掉,比如通过

    kill -SIGKILL child_process_pid或者

    kill -SIGTERM child_process_pid

    去kill child process。

    而其parent process却没有调用wait()或waitpid()系统调用时,

    这个child process就会变成zombie process。

    3. zombie process有什么危害?

    你的系统中如果只有一个或几个zombie process,可能并不会对你产生多大影响。

    虽然zombie process已经释放了绝大部分资源,但是仍然占用着一个process descriptor。

    而系统中的process的数量是有限制的,并不是可以无限申请的。

    通过
    sh-3.2# cat /proc/sys/kernel/pid_max
    32768

    可以最大的process个数为32768个(这个应该是configurable的)。

    所以如果zombie process占用了太多的process descriptor的话,

    可能会导致fork新的进程失败。

    所以,如果系统中出现zombie process,最好要查什么原因。

    4. 如何删掉系统中已经存在的zombie process?

    kill -9 zombie_process_pid无法kill掉zombie process。

    要想kill掉zombie process,只能先kill掉他的parent process,

    然后zombie process会变成orphan process,接着init process会

    接管orphan process成为zombie process的parent process,

    接着调用wait(),这样zombie process才会从process descriptor table中

    移除。

    5. 为什么要调用wait()系统调用?

    parent process调用wait()系统调用,相当于parent process确认了child process的结束,

    这样kernel就会释放掉child process所占有的资源,这里说的资源可能特别指的是

    process descriptor。

    6. parent process应该在什么时候去调用wait()系统调用?

    parent process调用wait()比较合适的时机是去monitor SIGCHILD这条signal,

    child process结束时会发送SIGCHILD。

    pseudo code如下:

    #include <signal.h>

    struct sigaction t_act, t_old_act;

    t_act.sa_flags = SA_NODEFER;

    t_act.sa_handler = signal_handler;

    sigaction(SIG_CHILD, &t_act, &t_old_act);

    static void _signal_handler()

    {

        wait(NULL);

    }

    以上如果有理解错误的地方,还请大家帮忙指出来,谢谢!

  • 相关阅读:
    获取spring源码并导入到eclipse
    Android的EditText设置可编辑与不可编辑的方法
    漫谈设计模式笔记:模板模式
    jfreechar中文乱码设置主题样式解决
    FrameLayout布局下让图片居中的方法
    java典型模块实例1:英文,数字,中文混合的验证码
    学习Lucene笔记一:创建索引
    How to Display a PDF File in a HTML Web Page
    NET数据类型及字节数
    2012年1月编程语言排行榜
  • 原文地址:https://www.cnblogs.com/pangblog/p/3299606.html
Copyright © 2020-2023  润新知