易截截图软件、单文件、免安装、纯绿色、仅160KB

[转]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时,则可以


相关文档:

Linux内核源代码数量已经超过1000万行

Linux版本2.6.27更新后,人们发现,这一内核的源代码数量已经超过了1000万行.
当然,这些行数仅仅是计算机统计出来的行数,包括空白行,为了代码的可读性增加的注释等,当然Linux和所有的长期项目一样,随着时间的推移,旧的代码 会被丢弃和更换,但总体规模来说,Linux的内核在不断增强,以下是一些有趣的统计数字,它们可以告诉你Lin ......

Linux软件包的安装


Linux软件包,常见的格式包括有rpm,deb,tar,gz,tgz,zip,bz2等等。几乎每个linux软件都会提供tar的格式的软件包,因为这种格式的软件包任何版本的linux都支持,所以大家至少要了解tar和rpm的使用方法。至于deb可用alien工具转换成tgz或rpm方式。bz2可用bunzip2解包即可。
一、RPM文件的安装 
RPM 是RedHat Package ......

PHP后台程序对LINUX信号的处理

PHP在运行的时候,直接kill掉,有肯能造成数据的丢失。幸好php模块,有针对signal的处理。
处理方式,首先检查有没有安装 PCNTL 模块
然后可以在一个包含文件中,添加以下代码
global $exitFlag;
$exitFlag = false;
// 增加linux信号量处理
if (DIRECTORY_SEPARATOR != '\\') {
    pcntl_signal(SI ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号