首页 > 代码库 > 这个可以程序主要测试高级并发服务器程序怎样写会避免僵尸进程?
这个可以程序主要测试高级并发服务器程序怎样写会避免僵尸进程?
#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.outi son/pa ppid pid fpid0 child 16980 16981 00 child 16980 16982 00 child 16980 16983 00 child 16980 16985 00 child 16980 16988 00 child 16980 16990 00 child 16980 16991 00 child 16980 16993 00 child 16980 16995 00 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.outi son/pa ppid pid fpid0 child 17135 17136 00 child 17135 17137 00 child 17135 17139 00 child 17135 17140 00 child 17135 17141 00 child 17135 17142 00 child 17135 17145 00 child 17135 17147 00 child 17135 17150 00 child 17135 17151 00 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]#
这个可以程序主要测试高级并发服务器程序怎样写会避免僵尸进程?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。