在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            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.biyoush.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 下一頁

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉