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);

}

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

linux zombie process相关学习的更多相关文章

  1. Linux 相关学习内容(不定期更新)

    Linux 主要目录 / 根目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始 /bin 可执行二进制文件的目录,如常用的命令,ls, tar, mv, cat.. /boot 放置 ...

  2. linux 杀掉僵尸进程 (zombie process, defunct)

    本文说明为什么会出现僵尸进程 (zombie process, defunct),以及如何杀掉僵尸进程 1. 为什么有僵尸进程 僵尸进程出现在父进程没有回收子进程的 PCB 的时候,这个时候子进程已经 ...

  3. Linux第六周学习总结——进程额管理和进程的创建

    Linux第六周学习总结--进程额管理和进程的创建 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/cour ...

  4. Linux C语言编程学习笔记 (1)进程控制入门

    想进行Linux系统开发已经很久了,一直没有付诸实践.今日终于开始学习Linux下的C语言编程,研究一天,终于大概弄明白了Linux系统进程管理的一些基本概念和编程方法,总结下来以方便大家学习和自己实 ...

  5. [Linux]——进程管理相关

    一些概念 程序program:通常以二进制程序放置在存储媒介中,以物理文件形式存在 进程process:程序通过用户执行被触发后,执行者的权限与属性.程序的代码和所需数据会被加载到内存中,OS给予这个 ...

  6. Linux kernel suspend resume学习:2.6.35与3.0.35比较【转】

    转自:http://blog.csdn.net/njuitjf/article/details/18317149 Linux kernel suspend resume学习:2.6.35与3.0.35 ...

  7. [Linux] Linux C编程一站式学习 Part.3

    Linux系统编程 文件与I/O C标准I/O库函数与Unbuffered I/O函数 C标准I/O库函数printf().putchar().fputs(),会在用户空间开辟I/O缓冲区 系统函数o ...

  8. linux用户权限相关内容查看

    linux用户权限相关内容查看 1   用户信息 创建用户一个名为 webuser 的账号,并填写相应的信息: root@iZ94fabhqhuZ:~# adduser webuser Adding ...

  9. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

随机推荐

  1. Swift - 添加、修改、删除通讯录联系人

    使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人.同时,还能对通讯录进行新增.修改.删除联系人操作. (注意:这些操作同查询一样,首先需要发起授权请求) 1 ...

  2. PHP中遍历stdclass object 及 json 总结[中国航天神舟十号以json形式向地面返回数据]

    $test=Array ( [0] => stdClass Object ( [tags] => 最快的车,Bloodhound,SSC [id] => 48326888 11 从网 ...

  3. google浙大招聘笔试题 师兄只能帮你到这儿了

    google浙大招聘笔试题 一.单选1.80x86中,十进制数-3用16位二进制数表示为?00100002.假定符号-.*.$分别代表减法.乘法和指数运算,且 1)三个运算符优先级顺序是:-最高,*其 ...

  4. Mongodb 上传图片

    mongdb 上传图片: [root@hy-mrz01 ~]# mongofiles put -u "pics" -p "jh7yxx" --host 127. ...

  5. SRM 582 Div II Level One: SemiPerfectSquare

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12580 比较简单,代码如下: #include <ios ...

  6. android面试题目大全<完结部分>,android笔试题目集锦

    1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存   B.内存回收程序负责释放无用内存    C.内存回收程序允许程序员直接释放内存    D.内存回收 ...

  7. 刚写好的读取多网卡IP地址的函数

    虽然现在一机多网卡已经很普遍(像Notebook带有线.无线.蓝芽等),但是找一个现成的能够一次过读出所有网卡IP地址的函数实在是难,无奈自己写了一个,好东西谁用谁知道. //uses WinSock ...

  8. iOS 使用UIBezierPath类实现随手画画板

    在上一篇文章中我介绍了 UIBezierPath类 介绍 ,下面这篇文章介绍一下如何通过这个类实现一个简单的随手画画板的简单程序demo,功能包括:划线(可以调整线条粗细,颜色),撤销笔画,回撤笔画, ...

  9. Mac下添加java环境变量

    2015年4月22号更新: 发现一个坑:最近发现有同事按照本文方式配置jdk环境变量一直不成功,后来发现他是使用了“Oh-My-Zsh”,配置文件的路径不是/etc/profile或~/.bash_p ...

  10. POJ 1330 Nearest Common Ancestors(Tarjan离线LCA)

    Description A rooted tree is a well-known data structure in computer science and engineering. An exa ...