校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > linux 守護進(jìn)程詳解及建立守護進(jìn)程

linux 守護進(jìn)程詳解及建立守護進(jìn)程

熱門標(biāo)簽:地圖標(biāo)注人員分布 益陽400電話申請辦理流程 400的電話一般從哪里辦理 江西全自動外呼系統(tǒng)報價 春運地圖標(biāo)注app 上海機器人外呼系統(tǒng)哪家好 昆明電銷機器人價格 梧州防封電銷卡 怎么用百度地圖標(biāo)注坐標(biāo)

linux 守護進(jìn)程詳解及建立守護進(jìn)程

守護進(jìn)程是一種后臺運行并且獨立于所有終端控制之外的進(jìn)程。

  守護進(jìn)程的啟動

  要啟動一個守護進(jìn)程,可以采取一下幾種方式:

  • 在系統(tǒng)期間通過系統(tǒng)的初始化腳本啟動守護進(jìn)程。這些腳本通常在目錄etc/rc.d下,通過它們所啟動的守護進(jìn)程具有超級用戶的權(quán)限。系統(tǒng)的一些基本服務(wù)通常都是通過這種方式啟動的。
  • 很多網(wǎng)絡(luò)服務(wù)程序都是由inetd守護程序啟動的。它監(jiān)聽各種網(wǎng)絡(luò)請求,如telnet、ftp等,在請求到達(dá)時啟動相應(yīng)的服務(wù)器程序(telnet server,ftp server等)。
  • 由cron定時啟動的處理程序。這些程序在運行時實際上也是一種守護進(jìn)程。
  • 由at啟動的處理程序。
  • 守護程序也可以從終端啟動,通常這種方式只用于守護進(jìn)程的測試,或者是重啟因某種原因而停止的進(jìn)程。
  • 在終端上用nohup啟動的進(jìn)程。用這種方法可以把所有的程序都變成守護進(jìn)程。

  守護進(jìn)程的建立

  先來看一個守護進(jìn)程建立的例子:    

#include sys/types.h>
#include signal.h>
#include unistd.h>
#include syslog.h>

#define MAXFD 64

void daemon_init(const char* pname, int facility){
  int i;
  pit_t pid;
  
  /*fork(),終止父進(jìn)程*/
  if(pid=fork()){
    exit(0);
  }
  /*第一子進(jìn)程*/
  setsid();
  signal(SIGHUP,SIG_IGN);
  /*fork()終止第一子進(jìn)程*/
  if(pid=fork())
    exit(0);
  /*第二子進(jìn)程*/
  daemon_proc = 1;
  /*將工作目錄設(shè)定位“/”*/
  chdir("/");
  /*清除文件掩碼*/
  umask(0);
  for(i = 0; iMAXFD; i++){
    close(i);
  }
  /*打開log*/
  openlog(pname, LOG_PID, facility);
}

  從上面的程序可以看出,建立一個守護進(jìn)程需要以下操作:

  1. fork。首先需要fork一個子進(jìn)程并將父進(jìn)程關(guān)閉。如果進(jìn)程是作為一個shell命令在命令行前臺啟動的,當(dāng)父進(jìn)程終止時,shell就認(rèn)為該命令已經(jīng)結(jié)束。這樣子進(jìn)程就自動成為了后臺進(jìn)程。而且,子進(jìn)程從父進(jìn)程那里繼承了組標(biāo)識符同時又擁有了自己的進(jìn)程標(biāo)識符,這樣保證了子進(jìn)程不會是一個進(jìn)程組的首進(jìn)程。這一點是下一步setsid所必需的。
  2. setsid。setsid()調(diào)用創(chuàng)建了一個新的進(jìn)程組,調(diào)用進(jìn)程成為該進(jìn)程組的首進(jìn)程。這樣,就使該進(jìn)程脫離原來的終端,成為了獨立終端外的進(jìn)程。
  3. 忽略SIGHUP信號,重新fork。這樣使進(jìn)程不再是進(jìn)程組的首進(jìn)程,可以防止在某些情況下進(jìn)程意外的打開終端而重新與終端發(fā)生聯(lián)系。
  4. 改變工作目錄,清楚文件掩碼。改變工作目錄主要是為了切斷進(jìn)程與原有文件系統(tǒng)的聯(lián)系。并且保證無論從什么地方啟動進(jìn)程都能正常工作。清除文件掩碼是為了消除進(jìn)程自身掩碼對其創(chuàng)建文件的影響。
  5. 關(guān)閉全部已打開的文件句柄。這是為了防止子進(jìn)程繼承在父進(jìn)程中打開的文件而使這些文件始終保持打開從而產(chǎn)生某些沖突。
  6. 打開log系統(tǒng)。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • .net Core 3.0 WebApi 創(chuàng)建Linux守護進(jìn)程的方法
  • 詳解Linux中的守護進(jìn)程
  • Java實現(xiàn)Linux下雙守護進(jìn)程
  • Python實現(xiàn)Linux下守護進(jìn)程的編寫方法
  • C++編寫LINUX守護進(jìn)程的實現(xiàn)代碼

標(biāo)簽:懷化 惠州 九江 贛州 新疆 河南 北京 亳州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《linux 守護進(jìn)程詳解及建立守護進(jìn)程》,本文關(guān)鍵詞  linux,守護,進(jìn)程,詳解,及,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux 守護進(jìn)程詳解及建立守護進(jìn)程》相關(guān)的同類信息!
  • 本頁收集關(guān)于linux 守護進(jìn)程詳解及建立守護進(jìn)程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 金山区| 赫章县| 方山县| 米脂县| 永春县| 东宁县| 边坝县| 上思县| 博罗县| 司法| 屯昌县| 凉城县| 海林市| 克什克腾旗| 张家港市| 南宫市| 双鸭山市| 阿拉善右旗| 桃园县| 小金县| 晋城| 筠连县| 浪卡子县| 曲靖市| 洮南市| 赞皇县| 祁东县| 崇信县| 南部县| 东光县| 岑巩县| 平定县| 永春县| 龙岩市| 韶山市| 金阳县| 巴塘县| 沙坪坝区| 万宁市| 广宁县| 定日县|