(三)和菜鸟一起学习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),
还有忽略信号法和捕获信号法我在这就先不说了。
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),
还有忽略信号法和捕获信号法我在这就先不说了。
相关文章推荐
- (三)和菜鸟一起学习unix之创建进程 fork getpid getppid
- (三)和菜鸟一起学习unix 进程终止
- (二)和菜鸟一起学习unix之文件和目录 getcwd,chdir
- 和菜鸟一起深入学习国嵌实验之进程创建,exec函数,进程等待
- 和菜鸟一起深入学习国嵌实验之进程创建,exec函数,进程等待
- (一)和菜鸟一起学习unix之文件I/O:write read lseek
- 和菜鸟一起深入学习国嵌实验之网络编程
- 和菜鸟一起学linux之upnp协议的学习记录
- UNIX环境高级编程学习之第十三章守护进程 - 单实例的守护进程
- 和菜鸟一起学linux之bluez学习记录2
- Unix/linux进程及线程间同步技术总结【学习总结,请勿吐槽。。。】
- unix环境编程学习笔记-----有关进程的一些疑问???
- 和菜鸟一起学linux之bluetooth学习记录基础知识
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- 和菜鸟一起深入学习国嵌实验之脚本编程
- 和菜鸟一起学linux之DBUS基础学习记录
- 和菜鸟一起深入学习国嵌实验之网络编程
- 进程控制理论<三>---那些年我们一起学习linux程序设计
- 和菜鸟一起学linux之upnp协议的学习记录
- UNIX环境编程学习笔记(18)——进程管理之进程控制三部曲