新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > linux 守護進程編寫

        linux 守護進程編寫

        作者: 時間:2016-09-12 來源:網絡 收藏

        這一點與BSD4不同,BSD4下必須顯式等待子進程結束才能釋放僵尸進程。

        三. 實例

        實例包括兩部分:主程序test.c和初始化程序init.c。

        主程序每隔一分鐘向/tmp目錄中的日志test.log報告運行狀態。

        初始化程序中的init_daemon函數負責生成。讀者可以利用init_daemon函數生成自己的守護進程。

        1. init.c清單

        #include unistd.h >

        #include signal.h >

        #include sys/param.h >

        #include sys/types.h >

        #include sys/stat.h >

        void init_daemon(void)

        {

        int pid;

        int i;

        if(pid=fork())

        exit(0); //是父進程,結束父進程

        else if(pid 0)

        exit(1); //fork失敗,退出

        //是第一子進程,后臺繼續執行

        setsid(); //第一子進程成為新的會話組長和進程組長

        //并與控制終端分離

        if(pid=fork())

        exit(0); //是第一子進程,結束第一子進程

        else if(pid 0)

        exit(1); //fork失敗,退出

        //是第二子進程,繼續

        //第二子進程不再是會話組長

        for(i=0;i NOFILE;++i) //關閉打開的文件描述符

        close(i);

        chdir(/tmp); //改變工作目錄到/tmp

        umask(0); //重設文件創建掩模

        return;

        }

        2. test.c清單

        #include stdio.h >

        #include time.h >

        void init_daemon(void);//守護進程初始化函數

        main()

        {

        FILE *fp;

        time_t t;

        init_daemon();//初始化為Daemon

        while(1)//每隔一分鐘向test.log報告運行狀態

        {

        sleep(60);//睡眠一分鐘

        if((fp=fopen(test.log,a)) >=0){

        t=time(0);

        fprintf(fp,Im here at %sn,asctime(localtime(t)) );

        fclose(fp);

        }

        }

        }

        以上程序在RedHat Linux6.0下編譯通過。步驟如下:

        編譯:gcc -g -o test init.c test.c

        執行:./test

        查看進程:ps -ef

        說明:在系統調用庫中有一個庫函數可以直接使一個進程變成守護進程,

        #include

        int daemon(int nochdir, int noclose);


        上一頁 1 2 下一頁

        關鍵詞: linux 守護進程

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 于都县| 毕节市| 富锦市| 德令哈市| 五华县| 斗六市| 湟中县| 精河县| 隆德县| 远安县| 兰溪市| 贵南县| 潜江市| 澳门| 科尔| 天镇县| 天等县| 华安县| 武威市| 嵊州市| 宁都县| 易门县| 通州区| 青阳县| 蓬莱市| 罗平县| 南华县| 弥渡县| 阿合奇县| 阳朔县| 永寿县| 祥云县| 宣汉县| 叙永县| 修武县| 逊克县| 晋州市| 昌邑市| 台北市| 丹江口市| 广饶县|