您的位置: 飞扬精品软件园 >> 文章中心 >> 系统教程 >> Linux系统 >> 阻塞与非阻塞

相关文章链接

最新新闻资讯

    阻塞与非阻塞

    阻塞与非阻塞


    • 阅览次数: 文章来源: 原文作者: 整理日期: 2010-07-12

     首先创建一个子进程,接着让其等待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);

      }

      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");

      }

      }

      }

      注:

      从以上实验可以看出两个概念的区别:

      阻塞操作是指在没有执行设备操作时,如果没有获得资源,则进程挂起,直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。


查看所有评论

网友对阻塞与非阻塞 的评论

网名:
主题:
内容:
验证码: