<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 進程控制開發(fā)之:Linux進程控制編程

          進程控制開發(fā)之:Linux進程控制編程

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

          本文引用地址:http://www.ex-cimer.com/article/257131.htm

          3)waitpid()使用實例。

          由于wait()的使用較為簡單,在此僅以waitpid()為例進行講解。本例中首先使用()創(chuàng)建一個子進程,然后讓其子進程暫停5s(使用了sleep())。接下來對原有的父進程使用waitpid(),并使用參數(shù)WNOHANG使該父進程不會阻塞。若有子進程退出,則waitpid()返回子進程號;若沒有子進程退出,則waitpid()返回0,并且父進程每隔一秒循環(huán)判斷一次。該程序的流程圖如圖7.5所示。

          圖7.5waitpid示例程序流

          該程序源代碼如下所示:

          /*waitpid.c*/

          #includesys/types.h>

          #includesys/wait.h>

          #includeunistd.h>

          #includestdio.h>

          #includestdlib.h>

          intmain()

          {

          pid_tpc,pr;

          pc=();

          if(pc0)

          {

          printf(Errorn);

          }

          elseif(pc==0)/*子進程*/

          {

          /*子進程暫停5s*/

          sleep(5);

          /*子進程正常退出*/

          exit(0);

          }

          else/*父進程*/

          {

          /*循環(huán)測試子進程是否退出*/

          do

          {

          /*調用waitpid,且父進程不阻塞*/

          pr=waitpid(pc,NULL,WNOHANG);

          /*若子進程還未退出,則父進程暫停1s*/

          if(pr==0)

          {

          printf(Thechildprocesshasnotexitedn);

          sleep(1);

          }

          }while(pr==0);

          /*若發(fā)現(xiàn)子進程退出,打印出相應情況*/

          if(pr==pc)

          {

          printf(Getchildexitcode:%dn,pr);

          }

          else

          {

          printf(Someerroroccured.n);

          }

          }

          }

          將該程序交叉編譯,下載到目標板后的運行結果如下所示:

          $./waitpid

          Thechildprocesshasnotexited

          Thechildprocesshasnotexited

          Thechildprocesshasnotexited

          Thechildprocesshasnotexited

          Thechildprocesshasnotexited

          Getchildexitcode:75

          可見,該程序在經(jīng)過5次循環(huán)之后,捕獲到了子進程的退出信號,具體的子進程號在不同的系統(tǒng)上會有所區(qū)別。

          讀者還可以嘗試把“pr=waitpid(pc,NULL,WNOHANG);”這句改為“pr=waitpid(pc,NULL,0);”或者“pr=wait(NULL);”,運行的結果為:

          $./waitpid

          Getchildexitcode:76

          可見,在上述兩種情況下,父進程在調用waitpid()或wait()之后就將自己阻塞,直到有子進程退出為止。

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

          上一頁 1 2 3 4 5 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();