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

隨筆-167  評論-8  文章-0  trackbacks-0
Some basic rules to coding a daemon prevent unwanted interactions from happening. We state these rules and then show a function, daemonize, that implements them.

編寫一個沒有交互功能的守護(hù)進(jìn)程是有一定的步驟的。我們列出相關(guān)的步驟,并且給出一個函數(shù)daemonize,用于展示。

1.    The first thing to do is call umask to set the file mode creation mask to 0. The file mode creation mask that's inherited could be set to deny certain permissions. If the daemon process is going to create files, it may want to set specific permissions. For example, if it specifically creates files with group-read and group-write enabled, a file mode creation mask that turns off either of these permissions would undo its efforts.

第一步是使用umask函數(shù),把所有的文件屏蔽字置0。文件屏蔽字是可以繼承的,當(dāng)你有相關(guān)操作時,如果你要創(chuàng)建一個文件,繼承過來的屏蔽字可能阻止你創(chuàng)建相關(guān)屬性的文件。比如:如果你明確的創(chuàng)建一個文件為組可讀,組可寫。如果你沒有把屏蔽字清零,那么繼承過來的屏蔽字可能不允許你添加這兩個屬性。

2.    Call fork and have the parent exit. This does several things. First, if the daemon was started as a simple shell command, having the parent terminate makes the shell think that the command is done. Second, the child inherits the process group ID of the parent but gets a new process ID, so we're guaranteed that the child is not a process group leader. This is a prerequisite for the call to setsid that is done next.

第二步,創(chuàng)建一個子進(jìn)程,并且令父進(jìn)程退出。這樣做有以下幾個好處:一,如果守護(hù)進(jìn)程是一個簡單的shell命令啟動的,那么父進(jìn)程的終止可以使shell認(rèn)為這個命令已經(jīng)執(zhí)行結(jié)束了。二,子進(jìn)程繼承了父進(jìn)程的組ID,但又有自己的進(jìn)程ID,所以我們可以保證目前的子進(jìn)程不是進(jìn)程組長。這一步也是我們接下來要用到的setid函數(shù)之前的必要條件。

3.    Call setsid to create a new session. The three steps listed in Section 9.5 occur. The process (a) becomes a session leader of a new session, (b) becomes the process group leader of a new process group, and (c) has no controlling terminal.

Under System Vbased systems, some people recommend calling fork again at this point and having the parent terminate. The second child continues as the daemon. This guarantees that the daemon is not a session leader, which prevents it from acquiring a controlling terminal under the System V rules (Section 9.6). Alternatively, to avoid acquiring a controlling terminal, be sure to specify O_NOCTTY whenever opening a terminal device.

使用setsid函數(shù)創(chuàng)建一個新的對會話。這樣做可以分三個步驟(第一步:把冰箱門打開………):首先,該進(jìn)程變?yōu)橐粋€新的會話組的會話頭。其次,成為了新的進(jìn)程組的組長。最后該進(jìn)程不再控制終端。

在system V 下,一些人建議在此時重新fork一次,并且令父進(jìn)程退出。第二個子進(jìn)程仍然是一個守護(hù)進(jìn)程。這樣做可以保證當(dāng)前進(jìn)程不是一個會話組的組長,這樣就可以防止他獲得控制終端的能力。作為選擇,為了防止獲得終端的控制權(quán),確定打開終端驅(qū)動時明確設(shè)置O_NOCTTY。

4.    Change the current working directory to the root directory. The current working directory inherited from the parent could be on a mounted file system. Since daemons normally exist until the system is rebooted, if the daemon stays on a mounted file system, that file system cannot be unmounted.

把當(dāng)前工作目錄變?yōu)楦夸洝.?dāng)前的工作目錄是繼承父進(jìn)程的。守護(hù)進(jìn)程是一直存在的,除非你重啟計算機。如果你的守護(hù)進(jìn)程是掛載到文件系統(tǒng)上的,那這個文件系統(tǒng)就不能卸載掉。

Alternatively, some daemons might change the current working directory to some specific location, where they will do all their work. For example, line printer spooling daemons often change to their spool directory.

可以根據(jù)你的選擇,一些守護(hù)進(jìn)程也許把當(dāng)前目錄改變到一些特殊的目錄下,同樣也能完成所有工作。

5.    Unneeded file descriptors should be closed. This prevents the daemon from holding open any descriptors that it may have inherited from its parent (which could be a shell or some other process). We can use our open_max function (Figure 2.16) or the getrlimit function (Section 7.11) to determine the highest descriptor and close all descriptors up to that value.

不需要的文件描述符應(yīng)當(dāng)關(guān)掉。這樣可以防止守護(hù)進(jìn)程持有從父進(jìn)程繼承過來的文件描述符。我們可以獲取最大的文件描述符,或者使用getrlimit函數(shù)來決定最大的文件描述符的值。并且全部關(guān)閉。

6.    Some daemons open file descriptors 0, 1, and 2 to /dev/null so that any library routines that try to read from standard input or write to standard output or standard error will have no effect. Since the daemon is not associated with a terminal device, there is nowhere for output to be displayed; nor is there anywhere to receive input from an interactive user. Even if the daemon was started from an interactive session, the daemon runs in the background, and the login session can terminate without affecting the daemon. If other users log in on the same terminal device, we wouldn't want output from the daemon showing up on the terminal, and the users wouldn't expect their input to be read by the daemon.

一些守護(hù)進(jìn)程把0,1,2這三個文件描述符指向/dev/null,這樣的話,當(dāng)庫函數(shù)試圖通過標(biāo)準(zhǔn)輸入輸出,標(biāo)準(zhǔn)錯誤時是沒有效果的。當(dāng)一個守護(hù)進(jìn)程脫離了終端時,就沒有地方打印信息;也沒有地方接收來自用戶的交互式輸入。甚至當(dāng)一個守護(hù)進(jìn)程從一個交互式的會話開始,守護(hù)進(jìn)程在后臺運行,登陸會話關(guān)閉也不會影響到守護(hù)進(jìn)程。如果其他用戶用同樣的終端登陸,我們不用設(shè)想從守護(hù)進(jìn)程打印信息到終端,也別指望用戶讀取守護(hù)進(jìn)程。

posted on 2010-09-04 14:35 老馬驛站 閱讀(652) 評論(0)  編輯 收藏 引用 所屬分類: linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩亚洲精品电影| 亚洲视频免费在线观看| 久久久天天操| 久久嫩草精品久久久精品| 在线观看视频一区| 欧美高清成人| 欧美午夜精品久久久久免费视| 亚洲少妇自拍| 欧美一二三区在线观看| 好看的亚洲午夜视频在线| 欧美黄色aa电影| 欧美日韩一区在线视频| 亚洲欧美成人网| 欧美在线视频播放| 亚洲激情成人网| 一区二区三区四区五区视频 | 美女图片一区二区| 免费观看不卡av| 亚洲性线免费观看视频成熟| 亚洲欧美日韩精品综合在线观看| 激情欧美日韩| 一本久久知道综合久久| 国产一区二区在线观看免费播放| 美日韩精品视频| 国产精品久久久久久久久久免费| 久久影院午夜片一区| 欧美激情性爽国产精品17p| 欧美一区二区三区日韩视频| 久久嫩草精品久久久久| 亚洲一区三区在线观看| 久久一区中文字幕| 亚洲欧美自拍偷拍| 欧美二区不卡| 久久青青草综合| 国产精品毛片在线| 亚洲国产精品福利| 国产日产亚洲精品| 日韩西西人体444www| 一区久久精品| 欧美一级久久| 亚洲免费影院| 欧美激情视频一区二区三区在线播放| 久久aⅴ国产欧美74aaa| 欧美日韩精品系列| 免费人成网站在线观看欧美高清| 国产精品www色诱视频| 欧美激情一区三区| 狠狠久久五月精品中文字幕| 一本色道久久99精品综合| 亚洲日本成人| 久久久夜色精品亚洲| 久久福利毛片| 国产精品卡一卡二| 日韩一级精品视频在线观看| 91久久夜色精品国产网站| 久久激情视频| 久久综合免费视频影院| 国产欧美综合在线| 亚洲综合精品一区二区| 亚洲欧美日韩精品久久久久| 欧美日韩免费在线观看| 日韩视频精品在线| 一区二区三区视频在线观看| 欧美日韩mp4| 亚洲精品少妇| 亚洲私人影院在线观看| 欧美日韩在线一区二区三区| aa亚洲婷婷| 亚洲在线一区二区三区| 国产精品久久九九| 亚洲一区免费| 久久人人爽人人爽| 亚洲成色精品| 免费人成精品欧美精品| 亚洲电影激情视频网站| 夜夜爽夜夜爽精品视频| 欧美日韩国产一区精品一区| 中国成人黄色视屏| 欧美在线一二三| 韩国精品主播一区二区在线观看| 久久久.com| 亚洲黄色片网站| 亚洲午夜av在线| 国产欧美一区二区色老头| 久久精品99国产精品| 欧美高清在线观看| 在线视频日韩| 国产精品揄拍一区二区| 久久久久综合网| 亚洲免费观看高清在线观看| 亚洲欧美一区二区视频| 国内揄拍国内精品少妇国语| 欧美成人一区二区在线| 一区二区三区四区精品| 久久久伊人欧美| 一本色道久久精品| 国产欧美欧洲在线观看| 老司机免费视频一区二区| 妖精视频成人观看www| 久久人人爽人人爽爽久久| 日韩亚洲欧美一区| 国产日韩精品电影| 欧美黄在线观看| 欧美在线看片a免费观看| 亚洲精品国产精品国自产观看浪潮 | 亚洲一区影院| 欧美高清视频免费观看| 香蕉成人啪国产精品视频综合网| 在线观看三级视频欧美| 国产精品红桃| 欧美风情在线观看| 香蕉av777xxx色综合一区| 亚洲福利一区| 久久一区欧美| 欧美一级网站| 在线亚洲电影| 亚洲欧洲偷拍精品| 国产视频一区免费看| 欧美午夜不卡在线观看免费| 久久影院午夜论| 欧美一进一出视频| 在线中文字幕不卡| 亚洲国产小视频在线观看| 老色鬼久久亚洲一区二区| 亚洲欧美卡通另类91av| 99精品视频网| 亚洲第一视频| 狠狠色狠色综合曰曰| 国产伦精品一区二区三区四区免费| 欧美精品乱人伦久久久久久 | 一本久道综合久久精品| 亚洲国产1区| 欧美粗暴jizz性欧美20| 久久久久久夜| 久久人人爽人人爽爽久久| 久久精品国产久精国产一老狼| 亚洲综合999| 亚洲视屏在线播放| 亚洲视频一二三| 亚洲一级影院| 亚洲专区国产精品| 亚洲一区亚洲| 新狼窝色av性久久久久久| 亚洲在线观看免费视频| 亚洲小少妇裸体bbw| 一本一本久久a久久精品综合麻豆| 最新日韩精品| 亚洲美女免费视频| aa成人免费视频| 亚洲在线免费观看| 午夜精品一区二区三区电影天堂| 亚洲永久精品国产| 欧美在线视频播放| 久久婷婷成人综合色| 免费人成精品欧美精品| 欧美激情一区二区三区不卡| 亚洲品质自拍| 亚洲一区二区久久| 久久国产欧美日韩精品| 久久亚洲国产精品一区二区| 欧美不卡高清| 欧美系列精品| 国内精品久久久久久久影视麻豆| 国产综合欧美在线看| 亚洲高清免费视频| 一本色道久久88精品综合| 亚洲欧美中日韩| 久久亚洲不卡| 亚洲人成啪啪网站| 午夜精品久久久久久久久久久久久 | 亚洲另类一区二区| 亚洲影音一区| 久久躁狠狠躁夜夜爽| 欧美日韩国产色视频| 国产欧美在线播放| 91久久精品国产| 欧美一区二区三区免费视| 欧美波霸影院| 中文精品视频| 免费国产一区二区| 国产精品久久久久久久久免费樱桃 | 亚洲第一精品福利| 亚洲视频免费看| 蜜臀99久久精品久久久久久软件 | 久久视频一区| 国产精品av免费在线观看| 国产自产在线视频一区| 亚洲美女一区| 久久精品午夜| 一区二区三区 在线观看视| 久久久99久久精品女同性| 欧美视频在线观看视频极品| 影音先锋久久精品| 午夜精品亚洲| 亚洲另类在线视频| 欧美 日韩 国产一区二区在线视频 | 日韩视频中文字幕| 麻豆视频一区二区| 亚洲欧洲99久久| 欧美系列精品|