当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
阻塞与非阻塞
发布时间:2010/7/13 16:32:14 来源:城市学习网 编辑:ziteng
  首先创建一个子进程,接着让其等待5秒,接下来对父进程应用WAITPID函数等待子进程的退出,父进程每隔1秒判断一次。
  源码来自华清远见:
  #include<sys/types.h>
  #include<sys/wait.h>
  #include<unistd.h>
  #include<stdio.h>
  #include<stdlib.h>
  int main()
  {
  pid_t pc, pr;
  //创建子进程
  pc = fork();
  if(pc < 0)
  {
  printf("error fork!\n");
  }
  else if(pc == 0)
  {
  sleep(5);
  exit(0);
  } [NextPage]   else
  {
  do{//循环测试是否子进程退出
  pr = waitpid(pc, NULL, WNOHANG);//非阻塞
  //pr =waitpid(pc, NULL, 0);//阻塞
  if(pr == 0)
  {
  printf("the child process has not exited!\n");
  sleep(1);
  }
  }while(pr == 0);
  if(pr == pc)
  {
  printf("get child exit code: %d\n", pr);
  }
  else
  {
  printf("some error occured.\n");
  }
  }
  }
  注:
  从以上实验可以看出两个概念的区别:
  阻塞操作是指在没有执行设备操作时,如果没有获得资源,则进程挂起,直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved