亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Unix > 正文

《Unix環境高級編程》讀書筆記 第13章-守護進程

2024-06-28 13:24:23
字體:
來源:轉載
供稿:網友
《Unix環境高級編程》讀書筆記 第13章-守護進程1. 引言
  • 守護進程是生存期長的一種進程。它們常常在系統引導裝入時啟動,僅在系統關閉時才終止。它們沒有控制終端,在后臺運行。
  • 本章說明守護進程結構、如何編寫守護進程程序、守護進程如何報告出錯情況。
2. 守護進程的特征
  • 基于BSD的系統下執行:ps -axj

    -a 顯示由其他用戶所擁有的進程的狀態;-x 顯示沒有控制終端的進程狀態;-j 顯示與作業有關的信息

  • 基于System V的系統下執行:ps -efj
  • linux下執行以上兩個命令輸出一致
  • 常見的守護進程:
  • kswapd,內存換頁守護進程。
  • flush守護進程在可用內存達到設置的最小閥值時將臟頁面沖洗至磁盤。
  • sync_supers守護進程定期將文件系統元數據沖洗至磁盤。
  • jbd守護進程幫助實現了ext4文件系統中的日志功能。
  • rpcbind守護進程提供了將遠程過程調用程序號映射為網絡端口號的服務。
  • rsyslogd守護進程可以被由管理員啟用的將系統消息記入日志的任何程序使用。
  • inetd守護進程。超級因特網服務進程。
  • crond守護進程在定期安排的日期和時間執行命令。
  • atd守護進程,允許用戶在指定的時間執行任務,但是每個任務只執行一次。
  • sshd守護進程提供了安全的遠程登錄和執行設施。
  • cuPSD守護進程,打印假脫機進程,處理對系統提出的各個打印請求。
3. 編程規則
  • 在編寫守護進程程序時需遵循一些基本規則,以防止產生不必要的交互作用。
    1. 調用umask將文件模式創建屏蔽字設置為一個已知值(通常為0)。
    2. 調用fork,然后使父進程exit。因為:第一,如果守護進程是通過shell啟動的,這可以讓shell認為這條命令已經執行完畢;第二,子進程繼承了父進程的進程組ID,但獲得一個新的進程ID,這保證了子進程不是一個進程組的組長進程。這是setsid的先決條件。
    3. 調用setsid創建一個新會話。使調用進程:a. 成為新會話的首進程;b. 成為一個新進程組的組長進程;c. 沒有控制終端
    4. 將當期工作目錄更改為根目錄,以免占有某文件系統,使得其不能被卸載?;蛘撸硨懯刈o進程還可能把當前工作目錄更改到某個指定位置。
    5. 關閉不再需要的文件描述符。使守護進程不再持有從其父進程繼承來的任何文件描述符??梢允褂胦pen_max函數或getrlimit函數來判定最高文件描述符的值,并關閉直到該值的所有描述符。
    6. 某些守護進程打開/dev/null使其具有文件描述符0、1、2 。這樣,任何一個試圖讀標準輸入、寫標準輸出或標準錯誤的庫例程都不會產生任何效果。
#include "apue.h"#include <syslog.h>#include <fcntl.h>#include <sys/resource.h>void daemonize(const char *cmd){  int i, fd0, fd1, fd2;  pid_t pid;  struct rlimit rl;  struct sigaction sa; /** Clear file creation mask.*/  umask(0); /** Get maximum number of file descriptors.*/  if (getrlimit(RLIMIT_NOFILE, &rl) < 0)    err_quit("%s: can’t get file limit", cmd); /** Become a session leader to lose controlling TTY.*/  if ((pid = fork()) < 0)    err_quit("%s: can’t fork", cmd);  else if (pid != 0) /* parent */    exit(0);  setsid(); /** Ensure future opens won’t allocate controlling TTYs.*/  sa.sa_handler = SIG_IGN;  sigemptyset(&sa.sa_mask);  sa.sa_flags = 0;  if (sigaction(SIGHUP, &sa, NULL) < 0)    err_quit("%s: can’t ignore SIGHUP", cmd);  if ((pid = fork()) < 0)    err_quit("%s: can’t fork", cmd);  else if (pid != 0) /* parent */    exit(0); /** Change the current working directory to the root so* we won’t PRevent file systems from being unmounted.*/  if (chdir("/") < 0)    err_quit("%s: can’t change directory to /", cmd); /** Close all open file descriptors.*/  if (rl.rlim_max == RLIM_INFINITY)    rl.rlim_max = 1024;  for (i = 0; i < rl.rlim_max; i++)    close(i); /** Attach file descriptors 0, 1, and 2 to /dev/null.*/  fd0 = open("/dev/null", O_RDWR);  fd1 = dup(0);  fd2 = dup(0); /** Initialize the log file.*/  openlog(cmd, LOG_CONS, LOG_DAEMON);  if (fd0 != 0 || fd1 != 1 || fd2 != 2) {    syslog(LOG_ERR, "unexpected file descriptors %d %d %d", fd0, fd1, fd2);  exit(1);  }}
4. 出錯記錄

  • 有以下3種產生日志消息的方法:
    1. 內核例程可以調用log函數。
    2. 大多數用戶進程(守護進程)調用syslog函數來產生日志消息。
    3. 無論一個用戶進程是在此主機上,還是在通過TCP/IP網絡連接到此主機的其他主機上,都可將日志消息發送到UDP端口514 。
#include <syslog.h>void openlog(const char *ident, int option, int facility);void syslog(int priority, const char *format, ...);void closelog(void);int setlogmask(int maskpri); Returns: previous log priority mask value5. 單實例守護進程
  • 為了正常運作,某些守護進程會實現為,在任一時刻只運行該守護進程的一個副本。
  • 文件和記錄鎖機制提供了一種保證一個守護進程只有一個副本在運行的方法。
#include <unistd.h>#include <stdlib.h>#include <fcntl.h>#include <syslog.h>#include <string.h>#include <errno.h>#include <stdio.h>#include <sys/stat.h>#define LOCKFILE "/var/run/daemon.pid"#define LOCKMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)extern int lockfile(int); int already_running(void){  int fd;  char buf[16];  fd = open(LOCKFILE, O_RDWR|O_CREAT, LOCKMODE);  if (fd < 0) {    syslog(LOG_ERR, "can’t open %s: %s", LOCKFILE, strerror(errno));    exit(1);  }  if (lockfile(fd) < 0) {    if (errno == EACCES || errno == EAGAIN) {      close(fd);      return(1);    }    syslog(LOG_ERR, "can’t lock %s: %s", LOCKFILE, strerror(errno));    exit(1);  }  ftruncate(fd, 0);  sprintf(buf, "%ld", (long)getpid());  write(fd, buf, strlen(buf)+1);  return(0);}
6. 守護進程的慣例
  • 在Unix系統中,守護進程遵循以下通用慣例:
    1. 若守護進程使用鎖文件,那么該文件通常存儲在/var/run目錄中。守護進程可能需要具有超級用戶權限才能在此目錄中創建文件。鎖文件的名字通常是name.pid。
    2. 若守護進程支持配置選項,那么配置文件通常存放在/etc目錄中。配置文件的名字通常是name.conf。
    3. 守護進程可用命令行啟動,但通常它們是由系統初始化腳本之一啟動的。
    4. 某些守護進程捕捉SIGHUP信號,當它們接收到該信號時,重新讀配置文件。
7. 客戶進程-服務器進程模型
  • 守護進程常常用作服務器進程。
  • 一般而言,服務器進程等待客戶進程與其聯系,提出某種類型的服務要求。
  • 在服務器進程中調用fork然后exec另一個程序來項客戶進程提供服務是很常見的。服務器進程通常管理著多個文件描述符:通信端點、配置文件、日志文件和類似的文件。為保證安全,可設置所有對于被執行程序不需要的文件描述符的執行關閉標志close-on-exec。原創文章,轉載請聲明出處:http://www.CUOXin.com/DayByDay/p/3948402.html

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图色老头| 国产精品电影在线观看| 亚洲白拍色综合图区| 高清欧美性猛交| 亚洲欧美国产精品| 欧美多人乱p欧美4p久久| 欧美激情在线狂野欧美精品| 欧美小视频在线观看| www.欧美三级电影.com| 亚洲一区二区国产| 亚洲无限乱码一二三四麻| 成人综合网网址| 国产精品啪视频| 成人免费在线视频网址| 最新国产精品拍自在线播放| 伊人一区二区三区久久精品| 亚洲人成电影在线播放| 日韩视频第一页| 成人xxxx视频| 日韩亚洲在线观看| 精品中文字幕在线| 亚洲tv在线观看| 亚洲欧美国产精品| 欧美激情视频免费观看| 国产亚洲成av人片在线观看桃| 97婷婷涩涩精品一区| 51久久精品夜色国产麻豆| 日韩精品有码在线观看| 亚洲成人精品在线| 国产精品欧美日韩久久| 亚洲精品在线不卡| 97久久久久久| 九九精品在线播放| 萌白酱国产一区二区| 亚洲久久久久久久久久| 自拍亚洲一区欧美另类| 日韩福利在线播放| 日韩欧美成人免费视频| 久久久av免费| 国产精品盗摄久久久| 久久久999精品视频| 97人人爽人人喊人人模波多| 韩国美女主播一区| 亚洲欧美在线免费观看| 亚洲黄页网在线观看| 亚洲视频自拍偷拍| 欧美日韩免费区域视频在线观看| 日韩女优人人人人射在线视频| 欧美成人精品一区二区| 亚洲一区二区三区xxx视频| 国产精品久久久久99| 456亚洲影院| 国产成人精品久久二区二区91| 日韩中文字幕亚洲| 精品激情国产视频| 国产一区二区视频在线观看| 日韩av大片免费看| 欧美激情一区二区三区成人| 亚洲国产高清福利视频| 操人视频在线观看欧美| 色香阁99久久精品久久久| 欧美精品久久一区二区| 欧美日产国产成人免费图片| 日本精品一区二区三区在线播放视频| 国产精自产拍久久久久久蜜| 国产精品久久久久久av| 中文字幕自拍vr一区二区三区| 国产午夜精品一区理论片飘花| 国内精品中文字幕| 久久久之久亚州精品露出| 日韩精品中文字幕在线| 亚洲欧美一区二区三区情侣bbw| 国产在线观看精品| 91在线直播亚洲| 欧美成人小视频| 亚洲国产精品va在线| 久久久久久久久久久久久久久久久久av| 国产一区二区三区18| 韩日精品中文字幕| 欧美刺激性大交免费视频| 91精品国产91久久久| 精品国产91久久久久久老师| 日韩精品免费综合视频在线播放| 国产一区视频在线播放| 国产精品三级在线| 国产精品入口免费视频一| 神马久久桃色视频| 亚洲成av人片在线观看香蕉| 亚洲高清久久网| 91精品久久久久久综合乱菊| 97视频在线观看网址| 岛国精品视频在线播放| 久久综合电影一区| 久久久精品亚洲| 国产一区二区视频在线观看| 精品欧美国产一区二区三区| 成人av电影天堂| 亚洲激情视频在线| 国产精品电影观看| 国产免费成人av| 欧美性生活大片免费观看网址| 亚洲va欧美va国产综合久久| 国产视频精品久久久| 国产精品成人观看视频国产奇米| 俺也去精品视频在线观看| 久久成人精品视频| 欧洲成人在线视频| 一区二区三区四区在线观看视频| 欧美激情一区二区三区在线视频观看| 成人福利免费观看| 亚洲国产91精品在线观看| 国产成人精品日本亚洲专区61| 日韩精品高清视频| 中文字幕日韩综合av| 欧美老女人bb| 久久久精品视频成人| 欧美国产欧美亚洲国产日韩mv天天看完整| 91精品在线播放| 国产精品成人播放| 欧美精品在线视频观看| 国产婷婷97碰碰久久人人蜜臀| 成人自拍性视频| 中文字幕亚洲专区| 欧美主播福利视频| 亚洲欧美一区二区三区在线| 国产精品偷伦免费视频观看的| 国产一区二区三区日韩欧美| 国产亚洲日本欧美韩国| 亚洲精品视频在线观看视频| 亚洲九九九在线观看| 中文字幕亚洲精品| 久久99久久久久久久噜噜| 日韩高清电影免费观看完整版| 成人信息集中地欧美| 国产精品视频自拍| 亚洲女人天堂成人av在线| 亚洲天堂色网站| 欧美成人免费小视频| 欧美中文字幕精品| 亚洲最大激情中文字幕| 亚洲精品国产精品久久清纯直播| 日韩欧美国产黄色| 国产精品久久久久99| 欧美国产一区二区三区| 国产精品日韩在线播放| 色婷婷av一区二区三区在线观看| 亚洲韩国日本中文字幕| 成人精品福利视频| 日韩中文字幕在线| 中文字幕久热精品视频在线| 欧美性受xxxx黑人猛交| 91久久精品久久国产性色也91| 亚洲欧美在线一区二区| 亚洲人av在线影院| 成人免费黄色网| 97精品一区二区视频在线观看| 欧美视频在线观看免费| 日韩大陆毛片av| 欧美色视频日本高清在线观看| 九九精品视频在线观看| 国产精品欧美一区二区| 亚洲第一福利视频| 97在线视频精品| 精品国产成人av|