[转]Linux: wait和僵尸进程
之前我们已经讲到用fork()来创建一个新进程,用exit()来终止一个进程。现在我们将略微深入了解exit()执行之后发生的事情。
事实上,exit()终止进程并没有将其彻底终结,而是将一个正常的进程变成了一个僵尸进程。该僵尸进程几乎不占用资源,没有可执行的代码,也不能被调度,仅仅只能在进程列表中保留一个位子。所以僵尸进程听似恐怖,实际上只能被后人凭吊而已
,但是却有它存在的实际价值。
它的价值就在于它记载了已退出子进程的状态。这些状态包括进程是否是正常退出?所占有的cpu时间?进程ID?等等。说白了,僵尸进程之所以存在,就是为供其他进程收集已退出进程的信息用的。
但是,linux的进程数是有上限的,进程列表中太多的“僵尸”为阻扰“新生命的”诞生。所以我们需要在收集它的信息后,将其彻底消灭。这时,我们就要用到wait()函数。
pid_t wait(int *status)
pid_s是wait的返回值数据类型,status是一个指针,指向一个整形数据,status就是用来收集已退出进程的状态的,即僵尸进程的信息。其
执行过程是这样的:进程一旦执行wait,就立即阻塞自己,直到查找到已经变成僵尸的子进程,收集它的信息并将其彻底摧毁后返回,不然就一直阻塞,直到僵
尸子进程出现。
假如我们不关心僵尸进程的信息,只想把它消灭,那么只要这样wait(NULL),只会返回子进程的ID号。正常情况下,wait收集已退出进程的状态,
并存入status中,它所指向的整数指出了是否是正常退出、以及正常结束时的返回值。对于这两方面的信息,我们用宏来表征:
WIFEXITED(status)用来指示子进程是否是正常退出,若是,则返回一个非零值。这里的status是wait(*status)中指针的对象。
WEXITSTATUS(status)用来当子进程正常退出时,提取子进程的返回值即对应exit(*)中的值。
由此可知,以上两个宏可以用来提取僵尸进程所记载的一部分状态信息。
除了wait()函数来提取僵尸进程的信息并将其消灭之外,还有一个函数同样可以胜任这个工作。pid_t wait(pid_t
pid int *status
options),pid用来指定对应进程的ID,当它是-1时,则可以
相关文档:
作者:韦东山,
华清远见嵌入式学院
讲师。
随着嵌
入式行业硬件平台的性能增强,项目需求和功能日益复杂,ARM公司推出的
CORTEX-M3,更是让以往做单片机的工程师在芯片和技术选型面临两难选择,本专题将从芯片价格、整个系统的硬件软件设计及维护的成本等各个方面给您
提供一个参考, 并从技术角度分析单片机和带操 ......
由于32位操作系统下面单进程最大内存使用不能超过2G,而我们用Memcached经常需要使用更大的内存空间,所以选择64位的Linux版本是必须的,64位OS下的Memcached安装和32位OS下差不多,只有一个地方稍有不同,详见下面的红色字体部分。
我们以版本memcached-1.2.6为例,对于其他版本替换相应版本号即可;
下载地址:http://w ......
最近在维护论坛,论坛的构建是linux nginx+php5.3+mysql5.1。最近一段时间老是出现问题,刚开始由于php版本以及设置的问题还有以前老版本留下的问题,使得论坛老被挂马,找了一个星期的问题,各处都补漏了一下的!php也升级了一下!
  ......
[精华] 完全用 GNU/Linux 工作
http://www.chinaunix.net 作者:enfuzion 发表于:2005-12-08 16:05:56
【发表评论】【查看原文】【Linux讨论区】【关闭】
转自http://www.chinaunix.net/jh/4/16102.html
完全用 GNU/Linux 工作
— 摈弃 Windows 低效率的工作方式,发掘&n ......