??????許多程序員說精靈(daemon)不是魔鬼(demon)。即使有時似乎象魔鬼,但你的服務(wù)器是不會由魔鬼控制的(或許你的某些用戶會由魔鬼控制,但你的服務(wù)器不會)。

????? 我們把精靈定義為一個在后臺運(yùn)行的程序,用于管理系統(tǒng)的各個功能。該詞的字面意思是“介乎神與人的精靈”。詩人威廉.巴特勒.耶茨很喜歡該詞的意喻及其對現(xiàn)實二重性的表達(dá)。他以人來看待精靈,用精靈來表達(dá)人性的另一面。你不會明白,魔鬼不存在該有多好!例如,你怎么知道你這塊餡餅是大的?除非你曾有一塊比這小的。

???? 事實上,精靈這個術(shù)語源自希臘神話。古希臘人稱精靈為超人,它充當(dāng)神與人之間的仲裁者。這是Unix精靈為你所做的一切的最準(zhǔn)確描述。實際上,精靈始終呆在后臺隨時等待調(diào)用去執(zhí)行某些服務(wù)。系統(tǒng)上運(yùn)行的某些精靈執(zhí)行系統(tǒng)指定的每項服務(wù)。但,請不要混淆精靈和進(jìn)程這兩個術(shù)語。
????
????既然精靈介于神人之間,那么人有沒有可能變成精靈呢?

????在unix的世界中,一般的進(jìn)程能變成精靈進(jìn)程嗎?答案是肯定的,下面我們就一步一步揭開人到精靈的進(jìn)化過程。

???決裂階段:
???在這個階段,我們必須脫離父母的懷抱,走向自己的新天地
???
???/*?父母創(chuàng)造了我們
???if(fork() > 0) {
??????/* 父母給了我們自由 */
??????exit(0);
???}

???創(chuàng)造階段:
???父母給我們自由身,我們可以創(chuàng)造自己的新天地。為了將來美好的未來,我們要做三件事情:
???1)創(chuàng)造新的會話期,我們成為會話期的領(lǐng)導(dǎo)
???2)創(chuàng)造新的組織(進(jìn)程組),我們自己成為該組的組長
???3)我們脫離終端的控制
???setsid();

???升華階段

???“上善若水,善利萬物而不爭。處眾人之所惡,故幾于道?!?,作為精靈的候選人,創(chuàng)造了自己的組織之后,不能再以組長自居,而應(yīng)把自己當(dāng)成普通人。
???
???signal(SIGHUP,SIG_IGN);
???if(fork()>0){
??????/*毀滅原身*/
??????exit(0);
???}

???返璞歸真:

???chdir("/");
???umask(0);
???for(i=0;i<64;++i)
???{
??????close(i);
???}

???圓滿階段:
???經(jīng)過以上各個修煉階段,在此為止我們已經(jīng)具備了精靈的各個條件。但是以上很不夠,作為一個精靈,最主要的還是我們毛主席那句話:“為人民服務(wù)”。

???我們應(yīng)該在這個階段把我們要做的事啟動起來,做以下事情:

???int service()
???{
??????/* 有什么要求 */
??????data = getIncomingRequest();

??????/*?為人民服務(wù) */
??????result? = processRequest(data)

??????/* 對人民的所求有個交代 */
??????sendResponse(result);
???}


???