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

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

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

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

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

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

???升華階段

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

???返璞歸真:

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

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

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

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

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

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


???