国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python守護(hù)進(jìn)程(daemon)代碼實(shí)例

2020-02-23 00:17:04
字體:
供稿:網(wǎng)友
# -*-coding:utf-8-*-import sys, os'''將當(dāng)前進(jìn)程fork為一個守護(hù)進(jìn)程  注意:如果你的守護(hù)進(jìn)程是由inetd啟動的,不要這樣做!inetd完成了  所有需要做的事情,包括重定向標(biāo)準(zhǔn)文件描述符,需要做的事情只有  chdir() 和 umask()了'''def daemonize(stdin='/dev/null',stdout= '/dev/null', stderr= 'dev/null'):  '''Fork當(dāng)前進(jìn)程為守護(hù)進(jìn)程,重定向標(biāo)準(zhǔn)文件描述符    (默認(rèn)情況下定向到/dev/null)  '''  #Perform first fork.  try:    pid = os.fork()    if pid > 0:      sys.exit(0) #first parent out  except OSError, e:    sys.stderr.write("fork #1 failed: (%d) %s/n" %(e.errno, e.strerror))    sys.exit(1)  #從母體環(huán)境脫離  os.chdir("/")  os.umask(0)  os.setsid()  #執(zhí)行第二次fork  try:    pid = os.fork()    if pid > 0:      sys.exit(0) #second parent out  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 = file(stdin, 'r')  so = file(stdout,'a+')  se = file(stderr,'a+',0)  os.dup2(si.fileno(), sys.stdin.fileno())  os.dup2(so.fileno(), sys.stdout.fileno())  os.dup2(se.fileno(), sys.stderr.fileno())def _example_main():  '''示例函數(shù):每秒打印一個數(shù)字和時間戳'''  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()  _example_main()'''第一個fork是為了讓shell返回,同時讓你完成setsid(從你的控制終端移除,這樣就不會意外地收到信號)。setsid使得這個進(jìn)程成為“會話領(lǐng)導(dǎo)(session leader)”,即如果這個進(jìn)程打開任何終端,該終端就會成為此進(jìn)程的控制終端。我們不需要一個守護(hù)進(jìn)程有任何控制終端,所以我們又fork一次。在第二次fork之后,此進(jìn)程不再是一個“會話領(lǐng)導(dǎo)”,這樣它就能打開任何文件(包括終端)且不會意外地再次獲得一個控制終端另外說明:umask()函數(shù)為進(jìn)程設(shè)置文件模式創(chuàng)建屏蔽字,并返回以前的值在shell命令行輸入:umask 就可知當(dāng)前文件模式創(chuàng)建屏蔽字常見的幾種umask值是002,022和027,002阻止其他用戶寫你的文件,022阻止同組成員和其他用戶寫你的文件,027阻止同組成員寫你的文件以及其他用戶讀寫或執(zhí)行你的文件rwx-rwx-rwx 代表是777 所有的人都具有權(quán)限讀寫與執(zhí)行chmod()改變文件的權(quán)限位int dup(int filedes) 返回新文件描述符一定是當(dāng)前文件描述符中的最小數(shù)值int dup2(int filedes, int filedes2);這兩個函數(shù)返回的新文件描述符與參數(shù)filedes共享同一個文件表項(xiàng)。'''
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 池州市| 仙居县| 衡阳市| 萨迦县| 宝应县| 海兴县| 兰溪市| 迭部县| 崇礼县| 牡丹江市| 宝兴县| 栾城县| 延边| 胶南市| 临沂市| 巨鹿县| 志丹县| 离岛区| 芮城县| 佛冈县| 石渠县| 无极县| 进贤县| 镇原县| 宁化县| 毕节市| 锡林郭勒盟| 射阳县| 烟台市| 定陶县| 双流县| 社会| 讷河市| 泰安市| 临湘市| 禹州市| 紫阳县| 天津市| 威海市| 新邵县| 钦州市|