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.laynepeng.cn】 |