您的位置:首页 > 其它

(三)和菜鸟一起学习unix 僵尸进程

2012-10-25 22:47 281 查看
例子:僵死进程  jingsi.c

1 #include<stdio.h>

  2 #include<unistd.h>

  3 #include<stdlib.h>

  4 int main()

  5 {

  6     pid_t pd;

  7

  8     if((pd = fork())==0)

  9     {

10         printf("chlid is %d\n",getpid());

11         exit(0);

12     }

13     /*wait()*/

14     printf("father is %d\n",getpid());

15     sleep(30);

        }

~                         

[root@localhost unix]# gcc jingsi.c -o js

[root@localhost unix]# ./js &

[1] 5124

[root@localhost unix]# chlid is 5125

father is 5124

ps

  PID TTY          TIME CMD

4850 pts/1    00:00:00 bash

5124 pts/1    00:00:00 js

5125 pts/1    00:00:00 js <defunct>

5126 pts/1    00:00:00 ps

defunct代表僵死进程 我们可以发现子进程并没有消失,而是变成了僵死进程并占用系统的资源,如果系统存在大量的僵死进程,我们可想而知后果。

僵死进程:

当子进程终止时,它释放资源,并且发送信号通知父进程,父进程接受信号,调用wait 返回子进程状态,并且释放系统进程表资源,

如果子进程先于父进程终止,而父进程没有调用wait接受子进程,于是子进程变成僵死进程,直到父进程结束。

预防僵死进程:

1 wait法   在13行加上wait()函数即可

2 托管法  大白话就是让父亲先死,儿子让祖宗领养(init),

还有忽略信号法和捕获信号法我在这就先不说了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: