中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

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

        本文引用地址:http://www.antipu.com.cn/article/257129.htm

        7.4.2編寫守護進程

        1.目的

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

        2.內(nèi)容

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

        3.實驗步驟

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

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

        圖7.9實驗7.4.2流程圖

        (2)實驗源代碼。

        具體代碼設(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)建子進程1*/

        child1=fork();

        if(child1==1)

        {

        perror(child1fork);

        exit(1);

        }

        elseif(child1>0)

        {

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

        }

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

        openlog(daemon_proc_info,LOG_PID,LOG_DAEMON);

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

        setsid();

        chdir(/);

        umask(0);

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

        {

        close(i);

        }

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

        child2=fork();

        if(child2==1)

        {

        perror(child2fork);

        exit(1);

        }

        elseif(child2==0)

        {/*進程child2*/

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

        syslog(LOG_INFO,child2willsleepfor10s);

        sleep(10);

        syslog(LOG_INFO,child2isgoingtoexit!);

        exit(0);

        }

        else

        {/*進程child1*/

        waitpid(child2,NULL,0);

        syslog(LOG_INFO,child1noticedthatchild2hasexited);

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

        closelog();

        while(1)

        {

        sleep(10);

        }

        }

        }

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

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

        (4)運行該程序。

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

        (6)使用ps–ef|grepdaemon_proc查看該守護進程是否在運行。

        4.實驗結(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

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

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

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

        可見,daemon_proc確實一直在運行。

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

        上一頁 1 2 3 下一頁

        評論


        相關(guān)推薦

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

        關(guān)閉