Linux進(jìn)程的阻塞與非阻塞 |
發(fā)布時(shí)間: 2012/8/10 14:20:00 |
首先創(chuàng)建一個(gè)子進(jìn)程,接著讓其等待5秒,接下來(lái)對(duì)父進(jìn)程應(yīng)用WAITPID函數(shù)等待子進(jìn)程的退出,父進(jìn)程每隔1秒判斷一次。
源碼來(lái)自華清遠(yuǎn)見(jiàn): #include #include #include #include #include int main() { pid_t pc, pr; //創(chuàng)建子進(jìn)程 pc = fork(); if(pc < 0) { printf("error fork!n"); } else if(pc == 0) { sleep(5); exit(0); } else { do{//循環(huán)測(cè)試是否子進(jìn)程退出 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"); } } } 注: 從以上實(shí)驗(yàn)可以看出兩個(gè)概念的區(qū)別: 阻塞操作是指在沒(méi)有執(zhí)行設(shè)備操作時(shí),如果沒(méi)有獲得資源,則進(jìn)程掛起,直到滿足可操作的條件再進(jìn)行操作。非阻塞操作的進(jìn)程在不能進(jìn)行設(shè)備操作時(shí),并不掛起 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |