#!/usr/bin/env python
#coding: utf-8
import sys, os
'''將當(dāng)前進(jìn)程fork為一個(gè)守護(hù)進(jìn)程
注意:如果你的守護(hù)進(jìn)程是由inetd啟動(dòng)的哲思,不要這樣做炸裆!inetd完成了
所有需要做的事情粤剧,包括重定向標(biāo)準(zhǔn)文件描述符浮禾,需要做的事情只有chdir()和umask()了
'''
def daemonize (stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
#重定向標(biāo)準(zhǔn)文件描述符(默認(rèn)情況下定向到/dev/null)
try:
pid = os.fork()
#父進(jìn)程(會(huì)話組頭領(lǐng)進(jìn)程)退出础芍,這意味著一個(gè)非會(huì)話組頭領(lǐng)進(jìn)程永遠(yuǎn)不能重新獲得控制終端招狸。
if pid > 0:
sys.exit(0) #父進(jìn)程退出
except OSError, e:
sys.stderr.write ("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror) )
sys.exit(1)
#從母體環(huán)境脫離
os.chdir("/") #chdir確認(rèn)進(jìn)程不保持任何目錄于使用狀態(tài)贤惯,否則不能umount一個(gè)文件系統(tǒng)菜皂。也可以改變到對(duì)于守護(hù)程序運(yùn)行重要的文件所在目錄
os.umask(0) #調(diào)用umask(0)以便擁有對(duì)于寫的任何東西的完全控制,因?yàn)橛袝r(shí)不知道繼承了什么樣的umask镇草。
os.setsid() #setsid調(diào)用成功后眶痰,進(jìn)程成為新的會(huì)話組長(zhǎng)和新的進(jìn)程組長(zhǎng),并與原來(lái)的登錄會(huì)話和進(jìn)程組脫離梯啤。
#執(zhí)行第二次fork
try:
pid = os.fork()
if pid > 0:
sys.exit(0) #第二個(gè)父進(jìn)程退出
except OSError, e:
sys.stderr.write ("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror) )
sys.exit(1)
#進(jìn)程已經(jīng)是守護(hù)進(jìn)程了竖伯,重定向標(biāo)準(zhǔn)文件描述符
for f in sys.stdout, sys.stderr: f.flush()
si = open(stdin, 'r')
so = open(stdout, 'a+')
se = open(stderr, 'a+', 0)
os.dup2(si.fileno(), sys.stdin.fileno()) #dup2函數(shù)原子化關(guān)閉和復(fù)制文件描述符
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
#示例函數(shù):每秒打印一個(gè)數(shù)字和時(shí)間戳
def main():
import time
sys.stdout.write('Daemon started with pid %d\n' % os.getpid())
sys.stdout.write('Daemon stdout output\n')
sys.stderr.write('Daemon stderr output\n')
c = 0
while True:
sys.stdout.write('%d: %s\n' %(c, time.ctime()))
sys.stdout.flush()
c = c+1
time.sleep(1)
if __name__ == "__main__":
daemonize('/dev/null','/tmp/daemon_stdout.log','/tmp/daemon_error.log')
main()
python-daemonize
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)魂爪,“玉大人先舷,你說(shuō)我怎么就攤上這事∽沂蹋” “怎么了蒋川?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撩笆。 經(jīng)常有香客問(wèn)我捺球,道長(zhǎng),這世上最難降的妖魔是什么夕冲? 我笑而不...
- 正文 為了忘掉前任氮兵,我火速辦了婚禮,結(jié)果婚禮上歹鱼,老公的妹妹穿的比我還像新娘泣栈。我一直安慰自己,他們只是感情好弥姻,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布南片。 她就那樣靜靜地躺著,像睡著了一般庭敦。 火紅的嫁衣襯著肌膚如雪疼进。 梳的紋絲不亂的頭發(fā)上,一...
- 那天秧廉,我揣著相機(jī)與錄音伞广,去河邊找鬼拣帽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赔癌,可吹牛的內(nèi)容都是我干的诞外。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼灾票,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了茫虽?” 一聲冷哼從身側(cè)響起刊苍,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎濒析,沒(méi)想到半個(gè)月后正什,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡号杏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年婴氮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盾致。...
- 正文 年R本政府宣布护赊,位于F島的核電站惠遏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏骏啰。R本人自食惡果不足惜节吮,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望判耕。 院中可真熱鬧透绩,春花似錦、人聲如沸祈秕。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)请毛。三九已至志鞍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間方仿,已是汗流浹背固棚。 一陣腳步聲響...
- 正文 我出身青樓厂汗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呜师。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娶桦,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 作為新人,對(duì)于如何學(xué)好PYTHON也是一頭霧雨角寸,也很想能得到別人的幫助菩混。今天看到這篇文章,感覺(jué)學(xué)習(xí)起來(lái)有了一個(gè)方向...
- 注:本文的原文地址為 http://segmentfault.com/a/1190000000618286 許多 ...
- 序言第1章 并行和分布式計(jì)算介紹第2章 異步編程第3章 Python的并行計(jì)算第4章 Celery分布式應(yīng)用第5章...
- 做python項(xiàng)目扁藕,需要用到mysql沮峡,一般用python-mysql,安裝時(shí)遇到錯(cuò)誤提示如下: Trace的關(guān)鍵...
- 序言第1章 并行和分布式計(jì)算介紹第2章 異步編程第3章 Python的并行計(jì)算第4章 Celery分布式應(yīng)用第5章...