linux 进程 阻塞,Linux进程的阻塞与非阻塞

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

}

}

}

注:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值