voidopenlog(constchar*ident,intoption,intfacility);voidsyslog(intpriority,constchar*format,...);voidcloselog(void);intsetlogmask(intmaskpri);//除syslog,很多平臺還提供它的一種變體來處理可變參數(shù)列表#include#incl" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

UNIX環(huán)境高級編程 守護進程

系統(tǒng) 1808 0

?

?

?

相關(guān)函數(shù)列表

      //syslog函數(shù)
#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);

//除syslog,很多平臺還提供它的一種變體來處理可變參數(shù)列表
#include <syslog.h>
#include <stdarg.h>
void vsyslog(int priority, const char *format, va_list arg);


    

?

?

ps -efj

結(jié)構(gòu)如下

      UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD
root         1     0     1     1  0 Aug07 ?        00:00:01 /sbin/init
root         2     0     0     0  0 Aug07 ?        00:00:00 [kthreadd]
root         3     2     0     0  0 Aug07 ?        00:00:00 [migration/0]
root         4     2     0     0  0 Aug07 ?        00:00:02 [ksoftirqd/0]
root         5     2     0     0  0 Aug07 ?        00:00:00 [migration/0]
root         6     2     0     0  0 Aug07 ?        00:00:10 [watchdog/0]
root         7     2     0     0  0 Aug07 ?        00:03:41 [events/0]
root         8     2     0     0  0 Aug07 ?        00:00:00 [cgroup]
root         9     2     0     0  0 Aug07 ?        00:00:00 [khelper]
root        10     2     0     0  0 Aug07 ?        00:00:00 [netns]
root        11     2     0     0  0 Aug07 ?        00:00:00 [async/mgr]
root        12     2     0     0  0 Aug07 ?        00:00:00 [pm]
root        13     2     0     0  0 Aug07 ?        00:00:18 [sync_supers]
root        14     2     0     0  0 Aug07 ?        00:00:20 [bdi-default]
root        15     2     0     0  0 Aug07 ?        00:00:00 [kintegrityd/0]
root        16     2     0     0  0 Aug07 ?        00:00:01 [kblockd/0]
root        17     2     0     0  0 Aug07 ?        00:00:00 [kacpid]
root        18     2     0     0  0 Aug07 ?        00:00:00 [kacpi_notify]
root        19     2     0     0  0 Aug07 ?        00:00:00 [kacpi_hotplug]
root        20     2     0     0  0 Aug07 ?        00:00:00 [ata/0]
root        21     2     0     0  0 Aug07 ?        00:00:00 [ata_aux]
root        22     2     0     0  0 Aug07 ?        00:00:00 [ksuspend_usbd]
root        23     2     0     0  0 Aug07 ?        00:00:00 [khubd]
root        24     2     0     0  0 Aug07 ?        00:00:00 [kseriod]
root        25     2     0     0  0 Aug07 ?        00:00:00 [md/0]
root        26     2     0     0  0 Aug07 ?        00:00:00 [md_misc/0]
root        27     2     0     0  0 Aug07 ?        00:00:01 [khungtaskd]
root        28     2     0     0  0 Aug07 ?        00:00:00 [kswapd0]
root        29     2     0     0  0 Aug07 ?        00:00:00 [ksmd]
root        30     2     0     0  0 Aug07 ?        00:00:00 [khugepaged]
root        31     2     0     0  0 Aug07 ?        00:00:00 [aio/0]
root        32     2     0     0  0 Aug07 ?        00:00:00 [crypto/0]
root        37     2     0     0  0 Aug07 ?        00:00:00 [kthrotld/0]
root        39     2     0     0  0 Aug07 ?        00:00:00 [kpsmoused]
root        40     2     0     0  0 Aug07 ?        00:00:00 [usbhid_resumer]
root        70     2     0     0  0 Aug07 ?        00:00:00 [kstriped]
root       275     2     0     0  0 Aug07 ?        00:00:00 [scsi_eh_0]
root       276     2     0     0  0 Aug07 ?        00:00:00 [scsi_eh_1]
root       359     2     0     0  0 Aug07 ?        00:00:00 [virtio-blk]
root       380     2     0     0  0 Aug07 ?        00:00:00 [jbd2/vda1-8]
root       381     2     0     0  0 Aug07 ?        00:00:00 [ext4-dio-unwrit]
root       430     2     0     0  0 Aug07 ?        00:00:00 [kauditd]
root       709     2     0     0  0 Aug07 ?        00:00:00 [virtio-net]
root       839     2     0     0  0 Aug07 ?        00:00:00 [vballoon]
root       906     2     0     0  0 Aug07 ?        00:00:00 [kjournald]
    

以上分別是用戶ID,進程ID,父進程ID,進程組ID,會話ID,終端名稱以及命令字符串

?

?

Linux中的守護進程

1.kswapd守護進程也稱為內(nèi)存換頁守護進程。它支持虛擬內(nèi)存子系統(tǒng)在經(jīng)過一段時間后將臟頁面慢慢的寫會

? ?磁盤來回收這些頁面

2.flush守護進程再可用內(nèi)存達到設(shè)置的最小閥值時將臟頁面刷新到磁盤。它也定期的將臟頁面刷新回磁盤來

? ?減少在系統(tǒng)出現(xiàn)故障時發(fā)生的數(shù)據(jù)丟失。多個刷新守護進程可以同時存在,每個寫回設(shè)備都有一個刷新守護

? ?進程。輸出實例中顯示一個名為flush-8:0的刷新守護進程。從名字可以看出,寫回設(shè)備室通過主設(shè)備號(8)和

? ?副設(shè)備號(0)來識別的

3.sync_supers守護進程定期將文件系統(tǒng)刷新到磁盤

4.jbd守護進程幫助實現(xiàn)了ext4文件系統(tǒng)中的日志功能

5.rpcbind守護進程提供將遠程過程調(diào)用(Remote Procedure Call RPC)程序號映射為網(wǎng)絡(luò)端口號的服務(wù)。

? ?syslogd守護進程可以被由管理員啟動的將系統(tǒng)消息記入日志的任何程序使用。可以在一臺實際的控制臺上

? ?打印這些消息,也可以將他們寫到一個文件中。

6.cron守護進程再定期安排的日期和時間執(zhí)行命令。

?

?

編寫守護進程時需要遵循一些基本規(guī)則 ,以防產(chǎn)生不必要的交互:

1)首先調(diào)用umask將文件模式創(chuàng)建屏蔽字設(shè)置為一個已知值(通常是0),由繼承的來的文件模式創(chuàng)建屏蔽字

? ?可能會被設(shè)置為拒絕某些權(quán)限。如果守護進程要創(chuàng)建文件,那么它可能要設(shè)置特定的權(quán)限。

2)調(diào)用fork,然后使父進程exit,這樣做實現(xiàn)下面幾點

? ? a)如果該守護進程是作為第一條簡單的shell命令啟動的,那么父進程終止會讓shell認(rèn)為這條命令已經(jīng)執(zhí)行

? ? ? ?完畢

? ? ?b)雖然子進程繼承了父進程的進程組ID,但獲得了一個新的進程ID,這樣就保證了子進程不是一個進程組

? ? ? ? 的組長進程,這是蝦米要進行的setsid調(diào)用的先決條件

3)調(diào)用setsid建一個會話,然后

? ? ?a)使進程成為會話的首進程

? ? ?b)成為一個新進程進程組的組長進程

? ? ?c)沒有控制終端

4)將當(dāng)前工作目錄更改為根目錄。從父進程處繼承過來的當(dāng)前工作目錄可能再一個掛載的文件系統(tǒng)中。因為

? ? 守護進程通常在系統(tǒng)再引導(dǎo)之前是一直存在的,所以如果守護進程的當(dāng)前工作目錄在一個掛載文件系統(tǒng)

? ? 中,那么該文件系統(tǒng)就不能被卸載。

5)關(guān)閉不在需要的文件描述符,這使得守護進程不再持有從父進程繼承來的任何文件描述符(父進程可能是

? ? shell進程,或者其他某個進程)。可以使用open_max函數(shù)或getrlimit函數(shù)來判定最高文件描述符值,并

? ? 關(guān)閉知道該值的所有描述符

6)某些守護進程打開/dev/null使其具有文件描述符0,1,2這樣,任何一個試圖讀標(biāo)準(zhǔn)輸入,寫標(biāo)準(zhǔn)輸出

? ?或標(biāo)準(zhǔn)錯誤的庫例程都不會產(chǎn)生任何效果。因為守護進程并不與終端設(shè)備相關(guān)聯(lián)

?

?

?

出錯記錄

守護進程調(diào)用syslog函數(shù),將日志寫入到一個集中式的地方

有以下三種產(chǎn)生日志消息的方法

1)內(nèi)核例程可以調(diào)用log函數(shù),任何一個用戶進程都可以通過打開(open)并讀取/dev/klog設(shè)備來讀取這些

? ?消息

2)大多數(shù)用戶進程(守護進程)調(diào)用syslog函數(shù)來產(chǎn)生日志消息,這使得消息發(fā)送至UNIX域數(shù)據(jù)報字段/dev/log

3)無論一個用戶進程是在此主機上,還是通過TCP/IP網(wǎng)絡(luò)連接到此主機的其他主機上,都可以將日志消息

? ?發(fā)向UDP端口514。syslog函數(shù)從不產(chǎn)生這些UDP數(shù)據(jù)報他們要求產(chǎn)生次消息日志的進程進行顯示的網(wǎng)絡(luò)

? ?編程

?

BSD的syslog設(shè)施

UNIX環(huán)境高級編程 守護進程
?

?

?

syslog的 openlog函數(shù)的option參數(shù)

option 說明
LOG_CONS 若日志消息不能通過UNXI域數(shù)據(jù)報發(fā)送至syslogd,則將消息寫至控制臺
LOG_NEDLAY

立即打開至syslogd守護進程的UNIX域數(shù)據(jù)報套接字,不要等到第一條消息已經(jīng)被記錄時

再打開。通常在記錄第一條消息之前,不打開該套接字

LOG_NOWAIT

不要等待在將消息記入日志過程中可能已創(chuàng)建的子進程。因為再syslog調(diào)用wait時,應(yīng)用

程序可能已獲得了子進程的狀態(tài),這種處理阻止了與捕捉SIGCHLD信號的應(yīng)用程序之間

產(chǎn)生的沖突

LOG_ODELAY 在第一條消息被記錄之前延遲打開至syslogd守護進程的連接
LOG_PERROR 除將日志消息發(fā)送給syslogd外,還將它寫至標(biāo)準(zhǔn)出錯(在Solaris上不可用)
LOG_PID

記錄每條消息都要包含進程ID,此選項可供對每個不同的請求都fork一個子進程的守護

進程使用(與從不調(diào)用fork的守護進程相比較,如syslogd)

?

openlog的facility參數(shù)

facility 說明
LOG_AUDIT 審計設(shè)施
LOG_AUTH 授權(quán)程序login,su,getty等
LOG_AUTHPRIV

與LOG_AUTH相同,但寫日志文件時

具有權(quán)限限制

LOG_CONCOLE 將消息寫入/dev/console
LOG_CRON cron和at
LOG_DAEMON 系統(tǒng)守護進程inetd,routed等
LOG_FTP FTP守護進程ftpd
LOG_KERN 內(nèi)核產(chǎn)生消息
LOG_LOCAL0 保留由本地使用
LOG_LOCAL1 保留由本地使用
LOG_LOCAL2 保留由本地使用
LOG_LOCAL3 保留由本地使用
LOG_LOCAL4 保留由本地使用
LOG_LOCAL5 保留由本地使用
LOG_LOCAL6 保留由本地使用
LOG_LOCAL7 保留由本地使用
LOG_LPR 行式打印機系統(tǒng)lpd,lpc等
LOG_MAIL 郵件系統(tǒng)
LOG_NEWS Usenet網(wǎng)絡(luò)新聞系統(tǒng)
LOG_NTP 網(wǎng)絡(luò)時間協(xié)議系統(tǒng)
LOG_SECURITY 安全子系統(tǒng)
LOG_SYSLOG syslogd收緊進程本身
LOG_USER 來自掐用戶進程的消息(默認(rèn))
LOG_UUCP UUCP系統(tǒng)

?

syslog中的level(按序排列)

level 說明
LOG_EMERG 緊急(系統(tǒng)不可使用)(最高優(yōu)先級)
LOG_ALERT 必須立即修復(fù)的情況
LOG_CRIT 嚴(yán)重情況(如硬件設(shè)備處錯)
LOG_ERR 出錯情況
LOG_WARNING 警告情況
LOG_NOTICE 正常但重要的情況
LOG_INFO 信息性消息
LOG_DEBUG 調(diào)試消息(最低優(yōu)先級)

?

?

?

守護進程遵循以下通用慣例:

1)若守護進程使用鎖文件,那么該文件通常存儲在/var/run目錄中。鎖文件的名字通常是name.pid,如cron.pid是

2)若守護進程支持配置選項,那么配置文件通常放在/etc/目錄中。配置文件的名字通常是name.conf,其中

? ? name是該守護進程或服務(wù)的名字,如syslogd守護進程的配置文件通常是/etc/syslog.conf

3)守護進程可用命令行啟動,但通常他們是系統(tǒng)初始化腳本之一(/etc/rc*或/etc/init.d/*)啟動的。如果守護進程

? ?終止時,應(yīng)當(dāng)自動的重啟動它,則我們可在/etc/inittab中為該守護進程包括respawn記錄項,這樣init就將

? ?重新啟動該守護進程

4)若一個守護進程有一個配置文件,那么當(dāng)該守護進程啟動時會讀該文件,但在此之后一般就不會再查看它。

? ?若更改了配置文件,那么守護進程應(yīng)該重啟。為避免這種麻煩,某些守護進程將捕捉SIGHUP信號,當(dāng)他們

? ?接收到該信號時,重新讀配置文件。因為守護進程并不與終端相結(jié)合,他們活是無控制終端的會話首進程,或

? ?是孤兒進程組中的成員,所以守護進程沒有理由期望接收SIGHUP,守護進程可以安全的重復(fù)使用SIGHUP

?

?

?

?

?

參考

BSD syslog協(xié)議的格式

?

?

?

?

?

UNIX環(huán)境高級編程 守護進程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 阿拉尔市| 昂仁县| 甘肃省| 遂昌县| 宣城市| 宁安市| 石楼县| 天台县| 绍兴市| 平乡县| 浦城县| 大港区| 高邑县| 梓潼县| 鄂伦春自治旗| 大城县| 潞西市| 紫金县| 呼和浩特市| 普宁市| 全南县| 大城县| 高邮市| 广东省| 涡阳县| 桦川县| 稷山县| 鸡东县| 资溪县| 潢川县| 揭西县| 浦江县| 朝阳县| 宣化县| 渝中区| 马龙县| 新郑市| 安徽省| 营山县| 郯城县| 土默特右旗|