<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創(chuàng)未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數(shù)據(jù)加載中……

    daemonize

    #include <sys/param.h>
    #include <signal.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/stat.h>
    void daemonize() {
        int pid = -1, fd = -1;
        // 1.轉(zhuǎn)變?yōu)楹笈_進程
        if ((pid = fork()) == -1) exit(1);
        if (pid != 0) exit(0); // 父進程(前臺進程)退出
        // 2.離開原先的進程組,會話
        if (setsid() == -1) exit(1); // 開啟一個新會話
        // 3.禁止再次打開控制終端
        if ((pid = fork()) == -1) exit(1);
        if (pid != 0) exit(0); // 父進程(會話領(lǐng)頭進程)退出
        // 4.關(guān)閉打開的文件描述符,避免浪費系統(tǒng)資源
        for (int i = 0; i < NOFILE; i++)
            close(i);
        // 5.改變當前的工作目錄,避免卸載不了文件系統(tǒng)
        if (chdir("/") == -1) exit(1);
        // 6.重設(shè)文件掩碼,防止某些屬性被父進程屏蔽,也有設(shè)置為0027的(守護進程創(chuàng)建的臨時文件不希望被其他用戶查看)
        umask(0);
        // 7.重定向標準輸入,輸出,錯誤流,因為守護進程沒有控制終端
        // 如果只是把0、1、2都close了,那么守護進程里新創(chuàng)建的文件fd會用到0、1、2,如果用戶的代碼里有用到printf/cout之類的,那就會把數(shù)據(jù)打到新創(chuàng)建的文件中,這樣就會產(chǎn)生混淆
        if ((fd = open("/dev/null", O_RDWR)) == -1) exit(1); // 打開一個指向/dev/null的文件描述符
        dup2(fd, STDIN_FILENO);
        dup2(fd, STDOUT_FILENO);
        dup2(fd, STDERR_FILENO);
        close(fd);
        // 8.本守護進程的子進程若不需要返回信息,那么交給init進程回收,避免產(chǎn)生僵尸進程,否則子進程退出后將成為僵尸進程
        if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) exit(1);
    }

    對setsid闡述較透徹:http://www.cnblogs.com/xuxm2007/archive/2011/07/29/2121280.html
    對終端的事說了些:http://blog.51cto.com/10541559/1771212
    對syslog的事說了些:https://www.linuxidc.com/Linux/2015-01/111933.htm
    此外,man 3 daemon這個庫函數(shù)只實現(xiàn)了部分階段(例如沒有屏蔽SIGCHLD以及對mask做任何處理):https://github.com/lattera/glibc/blob/master/misc/daemon.c

    posted on 2018-04-12 18:36 so true 閱讀(180) 評論(0)  編輯  收藏 所屬分類: Linux

    主站蜘蛛池模板: 综合偷自拍亚洲乱中文字幕| 国产婷婷综合丁香亚洲欧洲| 无遮挡免费一区二区三区| 免费鲁丝片一级在线观看| 亚洲一区欧洲一区| 毛片免费在线观看网址| 国产午夜亚洲精品| 日韩成人免费aa在线看| 毛片亚洲AV无码精品国产午夜| 国产免费直播在线观看视频| 国产成人亚洲综合在线| 亚洲男女内射在线播放| 中文字幕av免费专区| 国产AV无码专区亚洲Av| 97视频免费观看2区| 亚洲乱码一区二区三区国产精品| 最近最新的免费中文字幕| 看亚洲a级一级毛片| 亚洲一区无码中文字幕| 91青青国产在线观看免费| 亚洲一级毛片在线观| 国产精品jizz在线观看免费| 成年免费a级毛片| 亚洲男人第一av网站| 性感美女视频免费网站午夜 | 亚洲日韩在线视频| 午夜免费福利网站| 一级毛片a女人刺激视频免费 | 免费人成在线观看播放a| 亚洲AV人无码综合在线观看| 精品久久久久成人码免费动漫| 色婷婷亚洲一区二区三区| 亚洲精品伊人久久久久| 国产在线19禁免费观看国产| 亚洲变态另类一区二区三区| 永久在线免费观看| 亚洲AV成人无码网天堂| 亚洲AV无码不卡无码| 成年女人毛片免费视频| 深夜免费在线视频| 亚洲国产精品午夜电影|