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

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 說說守護進程
說說守護進程
時間:2016-12-30作者:華清遠見(jian)

守護進(jin)程又稱精靈進(jin)程(daemon),一(yi)般(ban)在系(xi)統(tong)啟動時開始,而在系(xi)統(tong)關閉時終(zhong)止。沒有控制終(zhong)端,運行在后臺。在linux系(xi)統(tong)中(zhong)有很多這類(lei)進(jin)程。

下(xia)面說一下(xia)如(ru)何創建一個(ge)守護進程。

(1) 使用umask修改文件的屏蔽字,為文件賦予跟多的權限,因為繼承來的文件可能某些權限被屏蔽,從而失去某些功能,如讀寫。
        (2) 調用fork函數創建一個子進程,而父進程退出。
        (3) 調用settid創建一個新會話,當前進程為會話組長,并且關閉控制終端。
        (4) 修改進程工作目錄為根目錄,chdir(“/”).
        (5) 關閉不需要的從父進程繼承過來的文件描述符。
       &nbsp;(6) 打(da)開/dev/null,null也(ye)稱黑(hei)洞設備,就是寫入(ru)或讀出什么都(dou)沒(mei)(mei)有效果。代(dai)開這個設備是文(wen)件(jian)具有0,1,2三個文(wen)件(jian)描(miao)述(shu)符,但(dan)是對(dui)標準(zhun)(zhun)輸入(ru),標準(zhun)(zhun)輸出,標準(zhun)(zhun)出錯的(de)(de)操作(zuo)都(dou)沒(mei)(mei)有效果。這部分(fen)內容不是必須的(de)(de)。

下(xia)面使用一個例程說一下(xia)這個過(guo)程。

#include <stdio.h>
        #include <unistd.h>
        #include <sys/types.h>
        #include <stdlib.h>
        #include <;sys/resource.h>

int main()
         {

        pid_t pid;
                struct rlimit r;
 &nbsp;             ; int i;

//XXX step 1:set umask
               &nbsp;umask(0);

//XXX setp 2:fork
                if((pid = fork()) < 0)
                {
                        perror("fork");
                        exit(0);
                }
                else if(pid != 0)
                {
                        exit(0);
              &nbsp; }

//XXX step 3:setsid
        ;        setsid();

//XXX step 4:chdir
          &nbsp;    ; chdir("/");

//XXX step 5:close all open file descriptors
                if(r.rlim_max == RLIM_INFINITY)
                {
                        r.rlim_max = 1024;
                } 
                for(i = 0; i < r.rlim_max; i++)
                {
                        close(i);
                }

                while(1)
        &nbsp;       {

        }
                return 0;
 &nbsp;     &nbsp;}

上面便是(shi)一個守護進(jin)程(cheng)的(de)創建過程(cheng),可是(shi)一些書或網絡上寫守護進(jin)程(cheng),會(hui)在第三步和(he)第四步之間添加這樣一點代碼。

        if((pid = fork()) < 0)
                {
                        perror("fork");
                        exit(0);
                }
                else if(pid != 0)
                {
                        exit(0);
     &nbsp;          }

很多學生就(jiu)會(hui)問,為什(shen)么要(yao)創建兩(liang)次進程呢,這是因為第三步結束后(hou),進程創建了(le)一個新(xin)的會(hui)話(hua)(hua)組,并成(cheng)為會(hui)話(hua)(hua)組長(chang),而(er)會(hui)話(hua)(hua)組長(chang)可能獲(huo)得(de)控制終端,如果獲(huo)得(de)了(le)控制終端那么或(huo)這個進程就(jiu)不是守護進程了(le)。所以(yi)添加了(le)這幾句代碼,讓(rang)進程失(shi)去會(hui)話(hua)(hua)組長(chang)的身份(fen),從而(er)沒有獲(huo)得(de)控制終端的權限(xian)。

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)