Linux进程的阻塞与非阻塞 |
发布时间: 2012/8/10 14:20:00 |
首先创建一个子进程,接着让其等待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"); } } } 注: 从以上实验可以看出两个概念的区别: 阻塞操作是指在没有执行设备操作时,如果没有获得资源,则进程挂起,直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起 本文出自:亿恩科技【www.enkj.com】 |