易截截图软件、单文件、免安装、纯绿色、仅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时,则可以


相关文档:

akw 和linux 命令

cat                                awk '{print}'
cat -s                        awk '{blank = NF == 0 ? ++blan ......

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

PHP在运行的时候,直接kill掉,有肯能造成数据的丢失。幸好php模块,有针对signal的处理。
处理方式,首先检查有没有安装 PCNTL 模块
然后可以在一个包含文件中,添加以下代码
global $exitFlag;
$exitFlag = false;
// 增加linux信号量处理
if (DIRECTORY_SEPARATOR != '\\') {
    pcntl_signal(SI ......

Linux from Scratch

1. Download all packet and patchs    Done
2. To be involved in the mail list
3. Check Host Requirements                    Done
还学习了 cut 显示某行的指定field ,head 显示前几行,readlin ......

完全用 GNU/Linux 工作


[精华] 完全用 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 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号