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

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

UNIX環(huán)境高級(jí)編程 守護(hù)進(jìn)程

系統(tǒng) 1825 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,很多平臺(tái)還提供它的一種變體來(lái)處理可變參數(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,進(jìn)程ID,父進(jìn)程ID,進(jìn)程組ID,會(huì)話ID,終端名稱以及命令字符串

?

?

Linux中的守護(hù)進(jìn)程

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

? ?磁盤(pán)來(lái)回收這些頁(yè)面

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

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

? ?進(jìn)程。輸出實(shí)例中顯示一個(gè)名為flush-8:0的刷新守護(hù)進(jìn)程。從名字可以看出,寫(xiě)回設(shè)備室通過(guò)主設(shè)備號(hào)(8)和

? ?副設(shè)備號(hào)(0)來(lái)識(shí)別的

3.sync_supers守護(hù)進(jìn)程定期將文件系統(tǒng)刷新到磁盤(pán)

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

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

? ?syslogd守護(hù)進(jìn)程可以被由管理員啟動(dòng)的將系統(tǒng)消息記入日志的任何程序使用??梢栽谝慌_(tái)實(shí)際的控制臺(tái)上

? ?打印這些消息,也可以將他們寫(xiě)到一個(gè)文件中。

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

?

?

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

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

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

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

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

? ? ? ?完畢

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

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

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

? ? ?a)使進(jìn)程成為會(huì)話的首進(jìn)程

? ? ?b)成為一個(gè)新進(jìn)程進(jìn)程組的組長(zhǎng)進(jìn)程

? ? ?c)沒(méi)有控制終端

4)將當(dāng)前工作目錄更改為根目錄。從父進(jìn)程處繼承過(guò)來(lái)的當(dāng)前工作目錄可能再一個(gè)掛載的文件系統(tǒng)中。因?yàn)?

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

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

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

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

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

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

? ?或標(biāo)準(zhǔn)錯(cuò)誤的庫(kù)例程都不會(huì)產(chǎn)生任何效果。因?yàn)槭刈o(hù)進(jìn)程并不與終端設(shè)備相關(guān)聯(lián)

?

?

?

出錯(cuò)記錄

守護(hù)進(jìn)程調(diào)用syslog函數(shù),將日志寫(xiě)入到一個(gè)集中式的地方

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

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

? ?消息

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

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

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

? ?編程

?

BSD的syslog設(shè)施

UNIX環(huán)境高級(jí)編程 守護(hù)進(jìn)程
?

?

?

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

option 說(shuō)明
LOG_CONS 若日志消息不能通過(guò)UNXI域數(shù)據(jù)報(bào)發(fā)送至syslogd,則將消息寫(xiě)至控制臺(tái)
LOG_NEDLAY

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

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

LOG_NOWAIT

不要等待在將消息記入日志過(guò)程中可能已創(chuàng)建的子進(jìn)程。因?yàn)樵賡yslog調(diào)用wait時(shí),應(yīng)用

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

產(chǎn)生的沖突

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

記錄每條消息都要包含進(jìn)程ID,此選項(xiàng)可供對(duì)每個(gè)不同的請(qǐng)求都fork一個(gè)子進(jìn)程的守護(hù)

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

?

openlog的facility參數(shù)

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

與LOG_AUTH相同,但寫(xiě)日志文件時(shí)

具有權(quán)限限制

LOG_CONCOLE 將消息寫(xiě)入/dev/console
LOG_CRON cron和at
LOG_DAEMON 系統(tǒng)守護(hù)進(jìn)程inetd,routed等
LOG_FTP FTP守護(hù)進(jìn)程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 行式打印機(jī)系統(tǒng)lpd,lpc等
LOG_MAIL 郵件系統(tǒng)
LOG_NEWS Usenet網(wǎng)絡(luò)新聞系統(tǒng)
LOG_NTP 網(wǎng)絡(luò)時(shí)間協(xié)議系統(tǒng)
LOG_SECURITY 安全子系統(tǒng)
LOG_SYSLOG syslogd收緊進(jìn)程本身
LOG_USER 來(lái)自掐用戶進(jìn)程的消息(默認(rèn))
LOG_UUCP UUCP系統(tǒng)

?

syslog中的level(按序排列)

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

?

?

?

守護(hù)進(jìn)程遵循以下通用慣例:

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

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

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

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

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

? ?重新啟動(dòng)該守護(hù)進(jìn)程

4)若一個(gè)守護(hù)進(jìn)程有一個(gè)配置文件,那么當(dāng)該守護(hù)進(jìn)程啟動(dòng)時(shí)會(huì)讀該文件,但在此之后一般就不會(huì)再查看它。

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

? ?接收到該信號(hào)時(shí),重新讀配置文件。因?yàn)槭刈o(hù)進(jìn)程并不與終端相結(jié)合,他們活是無(wú)控制終端的會(huì)話首進(jìn)程,或

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

?

?

?

?

?

參考

BSD syslog協(xié)議的格式

?

?

?

?

?

UNIX環(huán)境高級(jí)編程 守護(hù)進(jìn)程


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 虞城县| 兰西县| 左贡县| 鄂伦春自治旗| 左权县| 土默特左旗| 永丰县| 成安县| 台湾省| 伊吾县| 台中县| 璧山县| 金阳县| 清河县| 旌德县| 大同县| 明溪县| 吉首市| 泊头市| 沽源县| 黑龙江省| 河东区| 炉霍县| 芦山县| 榕江县| 黑水县| 西平县| 新蔡县| 溧水县| 清苑县| 冕宁县| 来安县| 郑州市| 萝北县| 嘉义市| 漳浦县| 荔波县| 德惠市| 贺州市| 大丰市| 绥江县|