Chinaunix首页 | 论坛 | 博客
  • 博客访问: 279412
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类: LINUX

2010-07-09 11:22:36

阻塞与非阻塞

首先创建一个子进程,接着让其等待5秒,接下来对父进程应用WAITPID函数等待子进程的退出,父进程每隔1秒判断一次。

源码来自华清远见:

#include

#include

#include

#include

#include

 

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

        }

    }

 

}

实验结果如下:

非阻塞:

阻塞

注:

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

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

阅读(858) | 评论(0) | 转发(0) |
0

上一篇:日志系统

下一篇:僵死的避免

给主人留下些什么吧!~~