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

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

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

    LALA  
    日歷
    <2009年12月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    留言簿(1)

    隨筆分類(31)

    文章分類(4)

    收藏夾(21)

    搜索

    •  

    積分與排名

    • 積分 - 30055
    • 排名 - 1390

    最新隨筆

    最新評論

    閱讀排行榜

     
        守護進程運行在后臺,不與任何控制終端相關聯.守護進程以root用戶運行或者其他特殊的用戶,并處理一些系統級的任務, 習慣上守護進程的名字以d結尾,但不是必須的.
        對守護進程的兩個基本要求: 它必須是init進程的子進程; 不與任何控制終端相關聯.
        一般來講, 進程可以通過以下步驟成為守護進程:
    1. 調用fork(), 創建新的進程, 它會是將來的守護進程.
    2. 在守護進程的父進程中調用exit(). 這保證祖父進程(守護進程的祖父進程)確認父進程已經結束. 還保證父進程不再繼續運行, 守護進程不是組長進程. 最后一點是順利完成一下步驟的前提.
    3. 調用setsid(), 使得守護進程有一個新的進程組和新的會話, 兩者都把它作為首進程, 這也保證它不會與控制終端相關聯.
    4. 用chdir()將當前工作目錄改為根目錄. 因為前面調用fork()創建了新進程, 它所繼承來的當前工作目錄可能在文件系統的任何地方. 而守護進程通常在系統啟動時運行, 同時不希望一些隨機目錄保持打開狀態, 也就阻止了管理員卸載守護進程工作目錄所在的那個文件系統.
    5. 關閉所有的文件描述符. 不需要繼承任何打開的文件描述符, 對于無法確認的文件描述符, 讓它們繼續處于打開狀態.
    6. 打開0, 1和2號文件描述符(標準輸入, 標準輸出和標準錯誤), 把它們重定向到/dev/null.
    根據這些規則, 下面程序可以成為守護進程:
     1 #include<sys/types.h>
     2 #include<sys/stat.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 #include<fcntl.h>
     6 #include<unistd.h>
     7 #include<linux/fs.h>
     8 
     9 int main(void)
    10 {
    11  pid_t pid;
    12  int i;
    13  /* create new process */
    14  pid = fork();
    15  if(pid == -1return -1;
    16  else if(pid != 0) exit(EXIT_SUCCESS);
    17  /* create new session and process group */
    18  if(setsid() == -1return -1;
    19  /* set the working directory to the root directory*/
    20  if(chdir("/"== -1return -1;
    21  /* close all open files -- NR_OPEN is overkill, but works */
    22  for(i = 0; i < NR_OPEN; i++) close(i);
    23  /* redirect fd's 0, 1, 2 to /dev/null */
    24  open("/dev/null", O_RDWR); /* stdin */
    25  dup(0); /* stdout */
    26  dup(0); /* stderr */
    27  /* do it daemon thing.*/
    28  
    29  return 0;
    30 }

    許多Unix系統在它們的C函數庫中提供了daemon()函數來完成這些工作:
    #include <unistd.h>
    int daemon(int nochdir, int noclose);

    posted on 2009-12-11 11:33 Dest 閱讀(1011) 評論(0)  編輯  收藏 所屬分類: Linux
     
    Copyright © Dest Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 国产综合精品久久亚洲| 日本亚洲免费无线码| 免费在线观看毛片| 亚洲AV成人一区二区三区观看| 国产成人免费高清激情明星| 亚洲黄色免费网址| 亚洲精品高清无码视频| 国产亚洲午夜精品| 亚洲高清免费视频| 一级特黄aaa大片免费看| 亚洲国产一成久久精品国产成人综合 | 亚洲中文字幕无码不卡电影| 欧亚一级毛片免费看| 亚洲日本一区二区一本一道| 99精品视频在线观看免费| 最新亚洲成av人免费看| 中文无码成人免费视频在线观看| 亚洲女初尝黑人巨高清| 久久久久久国产精品免费无码| 337p日本欧洲亚洲大胆精品555588| **真实毛片免费观看| 亚洲日本中文字幕一区二区三区| 一级毛片在线免费播放| 亚洲av无码国产精品夜色午夜| 99re热精品视频国产免费| 激情综合亚洲色婷婷五月| 国产精品免费一级在线观看| 亚洲精品偷拍视频免费观看| 日本高清免费不卡在线| 黄网站色视频免费观看45分钟| 麻豆精品国产免费观看| 一级毛片免费在线| 在线电影你懂的亚洲| 午夜成人免费视频| 99免费精品视频| 亚洲中文字幕久在线| 免费很黄很色裸乳在线观看| 免费看搞黄视频网站| 男人天堂2018亚洲男人天堂| 久久精品国产精品亚洲人人| 亚洲无砖砖区免费|