内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

守護(hù)進(jìn)程的創(chuàng)建方法與步驟

       守護(hù)進(jìn)程是運(yùn)行在后臺的一種特殊進(jìn)程。它獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程是一種很有用的進(jìn)程,Linux的大多服務(wù)器就是用守護(hù)進(jìn)程實(shí)現(xiàn)的。

郊區(qū)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

       守護(hù)進(jìn)程的創(chuàng)建步驟:

              1.使進(jìn)程在后臺運(yùn)行(創(chuàng)建子進(jìn)程,父進(jìn)程退出)

                 if((pid=fork())>0)

                      exit(0);

                 else if (pid<0)

                  {

                         perror("fail to fork");

                         exit(-1);

                   }

               2.脫離控制終端,登錄會話和進(jìn)程組(創(chuàng)建新會話)

                 進(jìn)程屬于一個進(jìn)程組,進(jìn)程組號進(jìn)程組長的進(jìn)程號。一個會話可以包含多個進(jìn)程組,這些進(jìn)程組共享一個控制終端,這個控制終端通常是創(chuàng)建進(jìn)程的登錄終端??刂平K端,會話和進(jìn)程組通常是從父進(jìn)程繼承下來的。我們的目的就是要擺脫他們,使之不受他們的影響。方法是在第一點(diǎn)的基礎(chǔ)上,調(diào)用setsid()使進(jìn)程成為會話組長:

                 setsid();

               說明:當(dāng)進(jìn)程是會話組長時setsid()調(diào)用失敗。但第一點(diǎn)已經(jīng)保證進(jìn)程不是會話組長。setsid()調(diào)用成功后,進(jìn)程成為新的會話組長和新的進(jìn)程組長,并與原來的登錄會話和進(jìn)程組脫離。由于會話過程對進(jìn)程的獨(dú)占性,進(jìn)程同時與控制終端脫離。

             3.禁止進(jìn)程重新打開控制終端

                現(xiàn)在進(jìn)程已成為無終端的會話組長,但它可以重新申請打開一個控制終端。可以通過使進(jìn)程不在成為會話組長來禁止進(jìn)程從新打開控制終端:

                 if(pid=fork())

                      exit(0);  //結(jié)束第一子進(jìn)程,第二子進(jìn)程不在是會話組長

             4.關(guān)閉所有文件描述符

                進(jìn)程從創(chuàng)建它的父進(jìn)程那里繼承了打開的文件描述符。如不關(guān)閉,將會浪費(fèi)系統(tǒng)資源,以及無法預(yù)料的錯誤。

               close(0);

               close(1);

               close(2);

             5.改變當(dāng)前工作目錄:

                進(jìn)程活動時,其工作目錄所在的文件系統(tǒng)不能卸下。一般需要將工作目錄改變到根目錄。

               chdir("\");

             6.重設(shè)權(quán)限掩碼:

                進(jìn)程從創(chuàng)建它的父進(jìn)程那里繼承了文件創(chuàng)建掩碼。它可能修改守護(hù)進(jìn)程所創(chuàng)建的文件的存取位。為防止這一點(diǎn),我們要將文件創(chuàng)建掩碼清除:

                umask(0);

             7.處理SIGCHLD信號:

                處理SIGCHLD信號并不是必須的。但對于某些進(jìn)程,特別是服務(wù)器進(jìn)程往往在請求到來時生成子進(jìn)程處理請求。如果父進(jìn)程不等待子進(jìn)程結(jié)束,子進(jìn)程將成為僵尸進(jìn)程,從而占用系統(tǒng)資源。如果父進(jìn)程等待子進(jìn)程的結(jié)束,將增加父進(jìn)程的負(fù)擔(dān),影響服務(wù)器進(jìn)程的并發(fā)性能。

               signal(SIGCHLD,SIG_IGN);

下面我們來看具體的代碼:(模擬實(shí)現(xiàn)簡單的守護(hù)進(jìn)程)

  
  my_daemon.c文件

   #include <stdio.h>
   #include <stdlib.h>
   #include <signal.h>
   #include <unistd.h>
  
  void my_daemon()
  {
      umask(0);
      pid_t id1=fork();
      if(id1<0)
      {
          perror("fork");                                                                                                                                             
          exit(1);
      }
      if(id1>0)
      {
          exit(0);
      }
  
      setsid();
      pid_t id2=fork();
      if(id2<0)
      {
          perror("fork");
          exit(1);
      }
      if(id2>0)
      {
          exit(0);
      }
  
      signal(SIGCHLD,SIG_IGN);
      chdir("/");
      close(0);
      close(1);
      close(2);
  }  
  int main()

  {
      my_daemon();
      while(1)
      {}
      return 0;                                                                                                                              
  }

運(yùn)行結(jié)果結(jié)果如下:

守護(hù)進(jìn)程的創(chuàng)建方法與步驟

我們可以看到有個進(jìn)程號為1的進(jìn)程,證明我們生成了守護(hù)進(jìn)程。

下面是一個相對而言比較完整的守護(hù)進(jìn)程,這個守護(hù)進(jìn)程每隔一定時間向daemon.log文件輸出時間信息:

   #include <stdio.h>
   #include <stdlib.h>
   #include <signal.h>
   #include <unistd.h>
   #include <time.h>
   #include <sys/types.h>
   #include <sys/stat.h>
  
  void my_daemon()
  {
      umask(0);
      pid_t id1=fork();
      if(id1<0)
      {
          perror("fork");
          exit(1);
      }
      if(id1>0)
      {
          exit(0);
      }
                                                                                                                                             
      setsid();
      pid_t id2=fork();
      if(id2<0)
      {
          perror("fork");
          exit(1);                                                                                                                           
      }
      if(id2>0)
      {
          exit(0);
      }
  
      signal(SIGCHLD,SIG_IGN);
      chdir("/");
      close(0);
      close(1);
      close(2);
  }
  
  int main()
  {
      FILE* fp;
      time_t t;
      fp=fopen("daemon.log","a");
      char *buf="hello bit";
      my_daemon();
      while(1)
      

      while(1)
      {
          sleep(1);
          t=time(0);
          fprintf(fp,"this is a daemon: %s",asctime(localtime(&t)));
      }                                                                                                                                      
      fclose(fp);
      return 0;
  }
  
                                          

                                          

                                 

標(biāo)題名稱:守護(hù)進(jìn)程的創(chuàng)建方法與步驟
文章路徑:http://www.rwnh.cn/article44/ipciee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、微信小程序、品牌網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、網(wǎng)站制作自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
北流市| 甘德县| 林甸县| 华蓥市| 长宁区| 乐东| 石阡县| 普陀区| 藁城市| 岑溪市| 富民县| 河北省| 班玛县| 揭西县| 陵川县| 三都| 瓦房店市| 乌什县| 乐安县| 拉孜县| 德庆县| 西城区| 松桃| 钦州市| 楚雄市| 托克托县| 同心县| 嘉黎县| 突泉县| 当雄县| 资中县| 札达县| 新昌县| 盐源县| 中方县| 绥芬河市| 柳江县| 文化| 遵化市| 建德市| 炎陵县|