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

          新聞中心

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

          進(jìn)程控制開發(fā)之:實(shí)驗(yàn)內(nèi)容

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

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

          7.4.2編寫守護(hù)進(jìn)程

          1.目的

          通過編寫一個(gè)完整的守護(hù)進(jìn)程,使讀者掌握守護(hù)進(jìn)程編寫和調(diào)試的方法,并且進(jìn)一步熟悉如何編寫多進(jìn)程程序。

          2.內(nèi)容

          在該中,讀者首先建立起一個(gè)守護(hù)進(jìn)程,然后在該守護(hù)進(jìn)程中新建一個(gè)子進(jìn)程,該子進(jìn)程暫停10s,然后自動(dòng)退出,并由守護(hù)進(jìn)程收集子進(jìn)程退出的消息。在這里,子進(jìn)程和守護(hù)進(jìn)程的退出消息都在系統(tǒng)日志文件(例如“/var/log/messages”,日志文件的全路徑名因版本的不同可能會(huì)有所不同)中輸出。子進(jìn)程退出后,守護(hù)進(jìn)程循環(huán)暫停,其間隔時(shí)間為10s。

          3.實(shí)驗(yàn)步驟

          (1)畫出該實(shí)驗(yàn)流程圖。

          該程序流程圖如圖7.9所示。

          圖7.9實(shí)驗(yàn)7.4.2流程圖

          (2)實(shí)驗(yàn)源代碼。

          具體代碼設(shè)置如下:

          /*daemon_proc.c*/

          #includestdio.h>

          #includestdlib.h>

          #includesys/types.h>

          #includeunistd.h>

          #includesys/wait.h>

          #includesyslog.h>

          intmain(void)

          {

          pid_tchild1,child2;

          inti;

          /*創(chuàng)建子進(jìn)程1*/

          child1=fork();

          if(child1==1)

          {

          perror(child1fork);

          exit(1);

          }

          elseif(child1>0)

          {

          exit(0);/*父進(jìn)程退出*/

          }

          /*打開日志服務(wù)*/

          openlog(daemon_proc_info,LOG_PID,LOG_DAEMON);

          /*以下幾步是編寫守護(hù)進(jìn)程的常規(guī)步驟*/

          setsid();

          chdir(/);

          umask(0);

          for(i=0;igetdtablesize();i++)

          {

          close(i);

          }

          /*創(chuàng)建子進(jìn)程2*/

          child2=fork();

          if(child2==1)

          {

          perror(child2fork);

          exit(1);

          }

          elseif(child2==0)

          {/*進(jìn)程child2*/

          /*在日志中寫入字符串*/

          syslog(LOG_INFO,child2willsleepfor10s);

          sleep(10);

          syslog(LOG_INFO,child2isgoingtoexit!);

          exit(0);

          }

          else

          {/*進(jìn)程child1*/

          waitpid(child2,NULL,0);

          syslog(LOG_INFO,child1noticedthatchild2hasexited);

          /*關(guān)閉日志服務(wù)*/

          closelog();

          while(1)

          {

          sleep(10);

          }

          }

          }

          (3)由于有些嵌入式開發(fā)板沒有syslog服務(wù),讀者可以在宿主機(jī)上編譯運(yùn)行。

          $gccdaemon_proc.c–odaemon_proc(或者使用Makefile)

          (4)運(yùn)行該程序。

          (5)等待10s后,以root身份查看系統(tǒng)日志文件(例如“/var/log/messages”)。

          (6)使用ps–ef|grepdaemon_proc查看該守護(hù)進(jìn)程是否在運(yùn)行。

          4.實(shí)驗(yàn)結(jié)果

          (1)在系統(tǒng)日志文件中有類似如下的信息顯示:

          Jul2021:15:08localhostdaemon_proc_info[4940]:child2willsleepfor10s

          Jul2021:15:18localhostdaemon_proc_info[4940]:child2isgoingtoexit!

          Jul2021:15:18localhostdaemon_proc_info[4939]:child1noticedthatchild2hasexited

          讀者可以從時(shí)間戳里清楚地看到child2確實(shí)暫停了10s。

          (2)使用命令ps–ef|grepdaemon_proc可看到如下結(jié)果:

          david49391021:15?00:00:00./daemon_proc

          可見,daemon_proc確實(shí)一直在運(yùn)行。

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

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();