色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 進程控制開發(fā)之:實驗內(nèi)容

          進程控制開發(fā)之:實驗內(nèi)容

          作者: 時間:2013-09-13 來源:網(wǎng)絡 收藏

          本文引用地址:http://cafeforensic.com/article/257129.htm

          7.4內(nèi)容

          7.4.1編寫多進程程序

          1.目的

          通過編寫多進程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數(shù)的使用,進一步理解在中多進程編程的步驟。

          2.內(nèi)容

          該實驗有3個進程,其中一個為父進程,其余兩個是該父進程創(chuàng)建的子進程,其中一個子進程運行“ls-l”指令,另一個子進程在暫停5s之后異常退出,父進程先用阻塞方式等待第一個子進程的結束,然后用非阻塞方式等待另一個子進程的退出,待收集到第二個子進程結束的信息,父進程就返回。

          3.實驗步驟

          (1)畫出該實驗流程圖。

          該實驗流程圖如圖7.8所示。

          圖7.8實驗7.4.1流程圖

          (2)實驗源代碼。

          先看一下下面的代碼,這個程序能得到我們所希望的結果嗎,它的運行會產(chǎn)生幾個進程?請讀者回憶一下fork()調(diào)用的具體過程。

          /*multi_proc_wrong.c*/

          #includestdio.h>

          #includestdlib.h>

          #includesys/types.h>

          #includeunistd.h>

          #includesys/wait.h>

          intmain(void)

          {

          pid_tchild1,child2,child;

          /*創(chuàng)建兩個子進程*/

          child1=fork();

          child2=fork();

          /*子進程1的出錯處理*/

          if(child1==-1)

          {

          printf(Child1forkerrorn);

          exit(1);

          }

          elseif(child1==0)/*在子進程1中調(diào)用execlp()函數(shù)*/

          {

          printf(Inchild1:execute'ls-l'n);

          if(execlp(ls,ls,-l,NULL)0)

          {

          printf(Child1execlperrorn);

          }

          }

          if(child2==-1)/*子進程2的出錯處理*/

          {

          printf(Child2forkerrorn);

          exit(1);

          }

          elseif(child2==0)/*在子進程2中使其暫停5s*/

          {

          printf(Inchild2:sleepfor5secondsandthenexitn);

          sleep(5);

          exit(0);

          }

          else/*在父進程中等待兩個子進程的退出*/

          {

          printf(Infatherprocess:n);

          child=waitpid(child1,NULL,0);/*阻塞式等待*/

          if(child==child1)

          {

          printf(Getchild1exitcoden);

          }

          else

          {

          printf(Erroroccured!n);

          }

          do

          {

          child=waitpid(child2,NULL,WNOHANG);/*非阻塞式等待*/

          if(child==0)

          {

          printf(Thechild2processhasnotexited!n);

          sleep(1);

          }

          }while(child==0);

          if(child==child2)

          {

          printf(Getchild2exitcoden);

          }

          else

          {

          printf(Erroroccured!n);

          }

          }

          exit(0);

          }

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉