下面的源码中搬掉僵尸

后面的站住

后面的站住

2016-02-19 18:08

下面请跟着图老师小编一起来了解下下面的源码中搬掉僵尸,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

  #include stdio.h
  #include sys/types.h
  #include unistd.h
  #include string.h
  extern int errno;
  
  main()
  {
  char c, string[100];
  FILE * fp;
  int k, s, childpid;
  printf("test in beginning!
  ");
  
  while((c = getchar()) == ' ');
  
  for(;;)
  {
  if((childpid = vfork()) 0)
  perror("childpid");
  else if(childpid ==0 )
  {
  childpid=getpid();
  
  printf("child %d in active!
  ", childpid);
  while((c = getchar()) != '
  ')
  putchar(c);
  
  printf("
  the child %d must quit!
  
  ", childpid);
  _exit(0);
  }
  }
  }
  
  增加
  else if (childpid 0)
  {
  sigignore (SIGCHLD);
  }
  
  僵尸出现的原因是子进程默认将资源归还给副进程,但是你的父进程先子进程而亡,造成子进程变成"孤儿",结束后变成"僵尸"
  忽略SIG CHILD信号是将子进程的控制权交给自己的父进程(一般就是你的login shell)这样就不会出现僵尸了
  
  
  
  
  我不知道楼上的用法,但是我估计会有问题,我认为正确的处理方法是在vfork之前加上信号处理机制,如:signal(SIG_CHLD, SIG_IGN);这条语句的意思是,忽略子进程退出而产生的SIG_CHLD信号,交给超级服务器去处理!
  
  
  
  zhongjl:
  在vfork前加上信号处理函数:
  signal(SIG_CHLD, Proc_CHLD);
  
  void Proc_CHLD(int SIGNO)
  {
   int pid = -1;
   int stat;
   while(pid=waitpid(0, &stat, WHNONG);
  }
  
  
  
  我同意zhongjl 使用的程序,因为我的程序以前也是有很多死进程,后来使用上面的代码后,就没了
展开更多 50%)
分享

猜你喜欢

下面的源码中搬掉僵尸

编程语言 网络编程
下面的源码中搬掉僵尸

下面的电器老人不能用

老人 电器 老人养生 生活常识
下面的电器老人不能用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

wps页眉下面的横线去掉方法

软件教程 电脑应用
wps页眉下面的横线去掉方法

眼睛下面的脂肪粒怎么去掉

去眼袋
眼睛下面的脂肪粒怎么去掉

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Excel如何批量插入多行 下面的做法可行

插入多行 Excel插入多行 Excel如何批量插入多行
Excel如何批量插入多行 下面的做法可行

冬天池塘里的水为什么下面的比上面的热

生活常识
冬天池塘里的水为什么下面的比上面的热

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网站登录记忆跳转实现的一种方法

网站登录记忆跳转实现的一种方法

电脑文件夹图标怎么改

电脑文件夹图标怎么改
下拉加载更多内容 ↓