栏目导航
热点推荐
- Linux新手要了解的十个知识点
- Linux下禁止别人ping
- Linux设备文件简介
- 如何修复Linux文件系统错误
- 笔/面试中常考到的一些linux脚本
- Linux操作系统上安装MySQL数据库
- Linux操作系统下隐藏文件的新方
- linux操作系统下的域名解析系统
- Linux与Unix比较Ftp/Telnet服务
- 虚拟主机为什么大多要使用Linux
- LinuxIPv6环境下DNS服务器配置攻
- 服务器维护:RHEL5系统下故障处
阅览排行
Linux进程的阻塞与非阻塞
www.jz123.cn 2010-08-05 来源: 中国建站 责任编辑(袁袁) 我要投递新闻
首先创建一个子进程,接着让其等待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: %dn", pr);
}
else
{
printf("some error occured.n");
}
}
}
注:
从以上实验可以看出两个概念的区别:
阻塞操作是指在没有执行设备操作时,如果没有获得资源,则进程挂起,直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起
上一篇:Linux中命令行修改网关方法 下一篇:linux中如何让命令在后台运行