久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久


實驗:編寫守護進程

分(fen)享(xiang)到:
           

    1.實驗目的

    通過編寫一個完整的守護進程,掌握守護進程編寫和調試的方法,進一步熟悉如何編寫多進程程序

    2.實驗內容

    在(zai)該實驗中,首(shou)先創建一個子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)1(守護(hu)進(jin)程(cheng)(cheng)(cheng)),然后在(zai)該子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)中新建一個子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)2,該子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)2暫停10s,然后自動退出,并(bing)由子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)1收集子(zi)(zi)(zi)線程(cheng)(cheng)(cheng)退出的(de)消息。在(zai)這里,子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)1和子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)2的(de)消息都在(zai)系統日志(zhi)(zhi)文件(如“/var/log/messages”,日志(zhi)(zhi)文件的(de)全(quan)路徑名因Linux版本的(de)不(bu)(bu)同可能會有(you)所不(bu)(bu)同)中輸出。在(zai)向日志(zhi)(zhi)文件寫入消息后,守護(hu)進(jin)程(cheng)(cheng)(cheng)(子(zi)(zi)(zi)進(jin)程(cheng)(cheng)(cheng)1)循環暫停,其(qi)間隔時間為10s。

    3.實驗步驟

    (1)畫出(chu)該實驗流程(cheng)(cheng)圖(tu)。該程(cheng)(cheng)序(xu)流程(cheng)(cheng)圖(tu)如圖(tu)1所示。


圖1 實驗流程圖

    (2)實驗源(yuan)代碼(ma)。具體代碼(ma)設置如下(xia):

    /* daemon_proc.c */
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <sys/wait.h>
    #include <syslog.h>

    int main(void)
    {
        pid_t child1,child2;
        int i;

        /* 創建子進程1 */
        child1 = fork();
        if (child1 == 1)
        {
            perror("child1 fork");
            exit(1);
        }
        else if (child1 > 0)
        {
            exit(0); /* 父進程退出 */
        }
        /* 打開日志服務 */
        openlog("daemon_proc_info", LOG_PID, LOG_DAEMON);

        /* 以下幾步是編寫守護進程的常規步驟 */
        setsid();
        chdir("/");
        umask(0);
        for(i = 0; i < getdtablesize(); i++)
        {
            close(i);
        }

        /* 創建子進程2 */
        child2 = fork();
        if (child2 == 1)
        {
            perror("child2 fork");
            exit(1);
        }
        else if (child2 == 0)
        { /* 進程child2 */
            /* 在日志中寫入字符串 */
            syslog(LOG_INFO, " child2 will sleep for 10s ");
            sleep(10);
            syslog(LOG_INFO, " child2 is going to exit! ");
            exit(0);
        }
        else
        { /* 進程child1 */
            waitpid(child2, NULL, 0);
            syslog(LOG_INFO, " child1 noticed that child2 has exited ");
            /* 關閉日志服務 */
            closelog();
            while(1)
            {
                sleep(10);
            }
        }
    }

    (3)由于有些(xie)嵌入式開發板沒有syslog服務(wu),讀者可以在(zai)宿主(zhu)機(ji)上編譯(yi)運行,代(dai)碼如(ru)下:

&nbsp;   $ gcc daemon_proc.c –o daemon_proc (或者使(shi)用Makefile)

    (4)運行該程序。

  &nbsp; (5)等(deng)待10s后,以(yi)root身份查看系統(tong)日志(zhi)文件(如“/var/log/messages”)。

  &nbsp; (6)使用ps-ef | grep daemon_proc查看(kan)該守護進程是否在運行(xing)。

    4.實驗結果

  &nbsp; (1)在系統日志文件中有類(lei)似如下(xia)的信息顯示:

    Jul 20 21:15:08 localhost daemon_proc_info[4940]: child2 will sleep for 10s
    Jul 20 21:15:18 localhost daemon_proc_info[4940]: child2 is going to exit!
    Jul 20 21:15:18 localhost daemon_proc_info[4939]: child1 noticed that child2 has exited

    讀者(zhe)可以(yi)從時間戳(chuo)里清楚地看到child2確(que)實暫停了(le)10s。

    (2)使用(yong)命令ps-ef | grep daemon_proc可看(kan)到如下結(jie)果(guo):

    david  &nbsp; 4939    1 0 21:15 ?    00:00:00 ./daemon_proc

&nbsp;   可見,daemon_proc確實(shi)一直在運行。

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱點鏈接:

   1、Linux守護進程
   2、Linux下多進程編程之exec函數語法及使用實例
   3、Linux下多進程編程之fork()函數語法
   4、Linux下多進程編程之fork()函數說明
   5、Linux下進程的內存結構

更多新聞>>