这个可以程序主要测试高级并发服务器程序怎样写会避免僵尸进程?
#include <unistd.h>
#include <stdio.h>
#include<stdlib.h>
#include<signal.h>
int main(void)
{ //signal(SIGCHLD, SIG_IGN);
int i=0;
printf("i son/pa ppid pid fpid\n");
//ppid指当前进程的父进程pid
//pid指当前进程的pid,
//fpid指fork返回给当前进程的值
while(1){
sleep(1); //之所以加入这个时间是因为,容易看出程序的变化,不然根本看不出变化,连鼠标都懂不了!
pid_t fpid=fork();
if(fpid==0)
{printf("%d child %4d %4d %4d\n",i,getppid(),getpid(),fpid);
//return 0; //这两个效果一样的!
exit(0);
}
}
return 0;
}
[root@linux Desktop]# gcc b.c
[root@linux Desktop]# ./a.out
i son/pa ppid pid fpid
0 child 16980 16981 0
0 child 16980 16982 0
0 child 16980 16983 0
0 child 16980 16985 0
0 child 16980 16988 0
0 child 16980 16990 0
0 child 16980 16991 0
0 child 16980 16993 0
0 child 16980 16995 0
0 child 16980 16996 0
^C
[root@linux Desktop]#
[root@linux Desktop]# ps aux | grep -w ‘Z‘ //产生了好多僵尸进程了
root 16981 0.0 0.0 0 0 pts/2 Z+ 20:38 0:00 [a.out] <defunct>
root 16982 0.0 0.0 0 0 pts/2 Z+ 20:38 0:00 [a.out] <defunct>
root 16983 0.0 0.0 0 0 pts/2 Z+ 20:38 0:00 [a.out] <defunct>
root 16985 0.0 0.0 0 0 pts/2 Z+ 20:38 0:00 [a.out] <defunct>
root 16987 0.0 0.0 4340 804 pts/3 S+ 20:38 0:00 grep -w Z
[root@linux Desktop]#
当把signal(SIGCHLD, SIG_IGN);这行代码加上时输出结果如下:
[root@linux Desktop]# gcc b.c
[root@linux Desktop]# ./a.out
i son/pa ppid pid fpid
0 child 17135 17136 0
0 child 17135 17137 0
0 child 17135 17139 0
0 child 17135 17140 0
0 child 17135 17141 0
0 child 17135 17142 0
0 child 17135 17145 0
0 child 17135 17147 0
0 child 17135 17150 0
0 child 17135 17151 0
0 child 17135 17152 0
^C
[root@linux Desktop]# //没有僵尸进程产生
[root@linux Desktop]# ps aux | grep -w ‘Z‘
root 17144 0.0 0.0 4336 796 pts/3 S+ 20:42 0:00 grep -w Z
[root@linux Desktop]# ps aux | grep -w ‘Z‘
root 17149 0.0 0.0 4336 792 pts/3 S+ 20:42 0:00 grep -w Z
[root@linux Desktop]#
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。