中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux下如何創建守護進程的步驟

發布時間:2020-08-26 03:21:32 來源:腳本之家 閱讀:346 作者:xld_hung 欄目:服務器

這兩天學習了linux 守護進程這個地方知識點挺多的,而且很重要,所以,今天添加一點小筆記。

1,進程的概念:程序的一次動態執行過程。 

進程存在于內存當中,存在著  創建,調度,執行和消亡,進程號是進程的唯一標志,每一個進程都有自己獨立的內存空間,在32位操作系統中,進程擁有0-4G的內存空間,其中0-3G屬于用戶,3G-4G屬于內核,所以就出現了進程的執行模式:用戶模式和內核模式。 

2,進程的類型:交互進程,批處理進程,守護進程 

3,守護進程:Linux中的后臺服務進程,daemon進程 

4,守護進程的創建步驟: 

(1)創建子進程,父進程退出。 

經過這步以后,子進程就會成為孤兒進程(父進程先于子進程退出, 此時的子進程,成為孤兒進程,會被init進程收養)。使用fork()函數,如果返回值大于0,表示為父進程,exit(0),父進程退出,子進程繼續。 

(2)在子進程中創建新會話,使當前進程成為新會話組的組長。 

使用setsid()函數,如果當前進程不是進程組的組長,則為當前進程創建一個新的會話期,使當前進程成為這個會話組的首進程,成為這個進程組的組長。 

(3)改變當前目錄為根目錄。 

由于守護進程在后臺運行,開始于系統開啟,終止于系統關閉,所以要將其目錄改為系統的根目錄下。進程在執行時,其文件系統不能被卸下。 

(4)重新設置文件權限掩碼。 

進程從父進程那里繼承了文件創建掩碼,所以可能會修改守護進程存取權限位,所以要將文件創建掩碼清除,umask(0); 

(5)關閉文件描述符。 

子進程從父進程那里繼承了打開文件描述符。所以使用close即可關閉。 

在這里要用到getdtablesize()函數得到這個進程打開文件的數目。 

按照上面的步驟即可完成守護進程的創建。 

具體的代碼如下,守護進程的功能寫的較為簡單,往文件里寫東西: 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>

int main()
{   // 1創建子進程 ,父進程退出
  pid_t pid = fork();
  if(pid<0)
  {
   perror("fork error");
   return -1;
  }
  else if(pid>0)
  {
   exit(0);
  }
  else
  {
    while(1)
    {
      //2 組長
      setsid();
      // 改變路徑至根目錄
      chdir("/tmp"); 
      //重設文件掩碼
      umask(0);
      //關閉文件描述符
      int des=getdtablesize();
      int i=0;
      for(i=0;i<des;i++)
      {
        close(i);
      }
    } 
    char buf[]="bat xld come!\n";
    int fd=open("xld.txt",O_WRONLY|O_CREAT |O_APPEND,0666);
     write(fd,buf,sizeof(buf));
     sleep(2);
    }
  return 0;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余江县| 永兴县| 长泰县| 东城区| 翁牛特旗| 宜兴市| 忻州市| 乌海市| 体育| 德格县| 东宁县| 兴海县| 佛山市| 东阳市| 虞城县| 沿河| 锡林浩特市| 茌平县| 通城县| 武隆县| 东丽区| 嵊州市| 福建省| 望奎县| 颍上县| 万年县| 滕州市| 康平县| 铜川市| 田东县| 宁德市| 静乐县| 资中县| 沙洋县| 鄂尔多斯市| 正定县| 新乡市| 民丰县| 荥阳市| 岗巴县| 五大连池市|