青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

守護進程

Posted on 2009-03-13 20:39 Prayer 閱讀(463) 評論(0)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX

實現守護進程的步驟

守護進程(Daemon)是運行在后臺的一種特殊進程。它獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。守護進程是一種很有用的進程。Linux的大多數服務器就是用守護進程實現的。比如,Internet服務器inetd,Web服務器httpd等。同時,守護進程完成許多系統任務。比如,作業規劃進程crond,打印進程lpd等。

在Linux系統中,要編程實現一個守護進程必須遵守如下的步驟。

1.讓init進程成為新產生進程的父進程。

調用fork函數創建子進程后,使父進程立即退出。這樣,產生的子進程將變成孤兒進程,并被init進程接管,同時,所產生的新進程將變為在后臺運行。

2.調用setsid函數

通過調用setsid函數,使得新創建的進程脫離控制終端,同時創建新的進程組,并成為該進程組的首進程。為了使讀者更好地理解這一步驟,下面介紹進程組、會話(session)的基本概念。

在Linux系統中,所有的進程都屬于各自的進程組。進程組是一個或多個進程的集合。打個比方,可以認為某個班級是一個進程組,而其中成員就是進程。一個班級至少有一個成員。當一個班級的最后一個成員不存在的時候,這個班級也就不存在了,也就是進程組消亡了。

每個進程組都有類似于進程號的標識,稱為進程組ID。進程組ID是由領頭進程的進程號決定的,每個進程組都存在一個領頭進程。進程組的存在與否與領頭進程是否存在沒有關系。

會話是一個或多個進程組的集合。與進程組類似,每個會話都存在一個領頭進程。Linux是一個多用戶的操作系統,在同一時刻系統中會存在屬于不同用戶的多個進程。如果用戶在某個終端上發送了某個信號,例如,按下“Ctrl+C”發送SIGINT信號,如何確保信號被正確地發送到對應的進程,同時不會影響使用其他終端的用戶的進程?

會話和進程組是Linux內核用于管理多用戶情況下用戶進程的方法。每個進程都屬于一個進程組,而進程組又屬于某個會話。當用戶從終端登錄系統(不管是終端還是偽終端),系統會創建一個新的會話。在該終端上啟動的進程都會被系統劃歸到會話的進程組中。

會話中的進程通過該會話中的領頭進程(常稱其為控制進程)與一個終端相連。該終端是會話的控制終端。一個會話只能有一個控制終端,反之一樣。如果會話存在一個控制終端,則它必然擁有一個前臺進程組。屬于該組的進程可以從控制終端獲得輸入。這時,其他的進程組都為后臺進程組。圖8.3所示為會話、進程組、進程與控制終端之間的關系。

圖8.3 會話、進程組、進程與控制終端的關系

由于守護進程沒有控制終端,而使用fork函數創建的子進程繼承了父進程的控制終端、會話和進程組,因此,必須創建新的會話,以脫離父進程的影響。Linux系統提供了setsid函數用于創建新的會話。setsid函數的信息如表8.1所示。

表8.1                                                             setsid函數

頭文件

<unistd.h>

函數形式

pid_t setsid(void);

返回值

成功

失敗

是否設置errno

調用進程的會話ID

−1

setsid函數將創建新的會話,并使得調用setsid函數的進程成為新會話的領頭進程。調用setsid函數的進程是新創建會話中的惟一的進程組,進程組ID為調用進程的進程號。setsid函數產生這一結果還有個條件,即調用進程不為一個進程的領頭進程。由于在第一步中調用fork的父進程退出,使得子進程不可能是進程組的領頭進程。該會話的領頭進程沒有控制終端與其相連。至此,滿足了守護進程沒有控制終端的要求。

3.更改當前工作目錄

使用fork函數產生的子進程將繼承父進程的當前工作目錄。當進程沒有結束時,其工作目錄是不能被卸載的。為了防止這種問題發生,守護進程一般會將其工作目錄更改到根目錄下(/目錄)。更改工作目錄使用的函數是chdir。

4.關閉文件描述符,并重定向標準輸入、輸出和錯誤輸出

新產生的進程從父進程繼承了某些打開的文件描述符,如果不使用這些文件描述符,則需要關閉它們。守護進程是運行在系統后臺的,不應該在終端有任何的輸出信息。可以使用dup函數將標準輸入、輸出和錯誤輸出重定向到/dev/null設備上(/dev/null是一個空設備,向其寫入數據不會有任何輸出)。下面給出具體的代碼:

      int fd;

      //將標準輸入輸出重定向到空設備

      fd = open ("/dev/null", O_RDWR, 0);

      if (fd != -1)

    {

       dup2 (fd, STDIN_FILENO);

       dup2 (fd, STDOUT_FILENO);

      dup2 (fd, STDERR_FILENO);

      if (fd > 2)

        close (fd);

    }

5.設置守護進程的文件權限創建掩碼

很多情況下,守護進程會創建一些臨時文件。出于安全性的考慮,往往不希望這些文件被別的用戶查看。這時,可以使用umask函數修改文件權限,創建掩碼的取值,以滿足守護進程的要求。

8.2.2 守護進程具體實現

本節給出一個守護進程創建的實例。程序p8.1.c中定義了daemon函數,用于實現對守護進程的創建。其創建思想在8.2.1中有詳細的介紹,程序的具體代碼如下:

//p8.1.c 守護進程的實現

#include <stdio.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

/* daemon函數用于將調用函數的進程轉化為守護進程 */

int

daemon (int nochdir, int noclose)

{

pid_t pid;

pid = fork ();

/* 如果創建進程失敗 */

if (pid < 0)

    {

      perror ("fork");

      return -1;

    }

/* 父進程退出運行 */

if (pid != 0)

    exit (0);

/* 成為會話領頭進程 */

pid = setsid();

if (pid < -1)

    {

      perror ("setsid");

      return -1;

    }

/* 將工作目錄修改成根目錄 */

if (! nochdir)

    chdir ("/");

/* 將標準輸入輸出重定向到空設備 */

if (! noclose)

    {

      int fd;

      fd = open ("/dev/null", O_RDWR, 0);

      if (fd != -1)

    {

      dup2 (fd, STDIN_FILENO);

      dup2 (fd, STDOUT_FILENO);

      dup2 (fd, STDERR_FILENO);

      if (fd > 2)

        close (fd);

    }

    }

umask (0027);

return 0;

}

int main(void)

{

       daemon(0,0);

       sleep(1000);

   

       return 0;

}  

使用gcc編譯p8.1.c,得到名為p8.1的可執行文件。執行該程序,程序將以守護進程的狀態運行,如圖8.4所示。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品欧美激情| 亚洲精品影视| 亚洲国产经典视频| 国产在线精品二区| 久久精品在线播放| 亚洲精品日韩激情在线电影| 亚洲无线一线二线三线区别av| 欧美日韩伦理在线| 亚洲一区自拍| 久久综合久久美利坚合众国| 亚洲激情在线激情| 国产精品卡一卡二| 久久夜色精品| 在线一区二区三区做爰视频网站| 久久不见久久见免费视频1| 一区二区在线不卡| 欧美日韩一区二区免费在线观看| 亚洲欧美美女| 亚洲黄一区二区| 香蕉乱码成人久久天堂爱免费| 一区免费观看| 国产精品高精视频免费| 看欧美日韩国产| 亚洲一区视频| 亚洲精品老司机| 蜜臀91精品一区二区三区| 亚洲男人的天堂在线aⅴ视频| 亚洲电影免费观看高清| 国产精品一区二区三区四区五区| 欧美77777| 久久精品男女| 亚洲欧美国产视频| 一本色道久久加勒比精品| 欧美激情国产日韩精品一区18| 欧美一区2区视频在线观看| 一区二区三区国产精华| 亚洲高清免费| 在线不卡中文字幕播放| 国产亚洲精品aa| 国产精品久久一区二区三区| 亚洲精品乱码久久久久久日本蜜臀 | 欧美在线亚洲一区| 一区二区三区免费观看| 日韩视频精品| 亚洲日本中文字幕| 一区在线观看| 狠狠爱成人网| 狠狠v欧美v日韩v亚洲ⅴ| 国产欧美 在线欧美| 国产精品免费aⅴ片在线观看| 欧美成人自拍视频| 欧美激情视频给我| 免费成人小视频| 免费不卡亚洲欧美| 欧美成人精品激情在线观看| 欧美成人日本| 欧美精品成人| 欧美午夜视频在线观看| 欧美三级黄美女| 国产精品成人免费视频| 国产精品豆花视频| 国产日产欧美精品| 国产有码在线一区二区视频| 在线观看国产精品淫| 亚洲国产日韩在线一区模特| 亚洲精品美女| 亚洲欧美日韩精品久久奇米色影视 | 伊人色综合久久天天五月婷| 激情综合中文娱乐网| 在线免费日韩片| 亚洲精品日韩欧美| 亚洲综合精品| 久久久久九九视频| 欧美成人tv| 夜夜嗨av一区二区三区网站四季av | 久久精品中文字幕一区| 久久精品论坛| 欧美精品一区二区久久婷婷| 欧美日韩国产免费观看| 国产精品网站在线观看| 一区二区三区在线高清| 99精品国产福利在线观看免费 | 国内外成人免费激情在线视频网站 | 你懂的成人av| 91久久久久| 午夜视频一区在线观看| 另类国产ts人妖高潮视频| 欧美特黄一级| ●精品国产综合乱码久久久久| 99日韩精品| 久久亚洲欧美| 亚洲少妇自拍| 欧美成人精品一区| 国产午夜精品久久久| 亚洲精品在线观看视频| 久久国产高清| 日韩午夜av在线| 久久久久在线观看| 国产精品欧美久久| 亚洲乱码视频| 欧美freesex8一10精品| 亚洲永久在线观看| 欧美精品一区二区三区久久久竹菊| 国产亚洲高清视频| 亚洲视频在线二区| 欧美成人嫩草网站| 亚洲欧美日韩国产中文在线| 欧美日韩国产123区| 亚洲国产精品国自产拍av秋霞 | 亚洲精品中文在线| 另类天堂av| 欧美在线观看视频在线| 国产精品影片在线观看| 中文欧美日韩| 亚洲黄色一区| 免费毛片一区二区三区久久久| 国内伊人久久久久久网站视频| 亚洲欧美久久久| 亚洲欧洲一区二区三区| 久久手机免费观看| 狠狠爱www人成狠狠爱综合网| 欧美一区亚洲一区| 中文高清一区| 国产精品xxx在线观看www| 一区二区三区四区蜜桃| 亚洲人成毛片在线播放| 美乳少妇欧美精品| 最新国产成人av网站网址麻豆| 免费成人黄色| 看片网站欧美日韩| 亚洲日本久久| 亚洲精品久久在线| 欧美视频在线观看一区二区| 亚洲一区精品在线| 亚洲欧美日韩中文在线制服| 国产精品视频久久一区| 亚洲小说欧美另类婷婷| 亚洲精品小视频| 欧美成人在线免费观看| 卡一卡二国产精品| 99精品视频免费| 999在线观看精品免费不卡网站| 欧美久久久久久久久| 亚洲校园激情| 亚洲欧美制服中文字幕| 韩国一区二区三区在线观看| 久久久人成影片一区二区三区观看| 欧美一区观看| 亚洲国产精品一区在线观看不卡| 欧美大色视频| 欧美视频一区二区在线观看| 久久激情视频免费观看| 久久中文字幕一区二区三区| 99在线热播精品免费| 亚洲网友自拍| 亚洲成色999久久网站| 91久久精品国产91久久性色tv| 欧美国产日韩精品| 午夜精品一区二区三区在线播放 | 亚洲国产精品尤物yw在线观看| 欧美国产精品中文字幕| 亚洲欧美文学| 久久久噜噜噜久久| 亚洲网站在线看| 性色av一区二区三区红粉影视| 亚洲福利视频专区| 亚洲一区二区三区免费在线观看| 狠狠久久亚洲欧美专区| 99热这里只有精品8| 在线观看欧美精品| 宅男精品导航| 亚洲欧洲日韩在线| 欧美亚洲在线观看| 一区二区欧美在线| 久久亚洲一区二区三区四区| 亚洲综合色自拍一区| 免费亚洲视频| 久久久www成人免费无遮挡大片| 欧美大片免费观看在线观看网站推荐| 亚洲欧美另类在线| 欧美激情欧美激情在线五月| 久久综合国产精品台湾中文娱乐网| 欧美日韩国产美| 亚洲国产欧美国产综合一区| 国产中文一区二区| 亚洲午夜久久久久久久久电影院| 亚洲精品中文字| 另类激情亚洲| 欧美~级网站不卡| 国产中文一区| 欧美在线视频在线播放完整版免费观看| 99在线精品视频| 欧美激情一区二区三区不卡| 久久综合影视| 国产主播一区二区| 欧美一级理论性理论a| 午夜精品久久久久久久| 欧美日韩在线另类| 最新成人在线| 久久影视精品|