日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python fork 守护进程

發布時間:2023/12/19 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python fork 守护进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# -*-coding:utf-8-*- import sys, os'''將當前進程fork為一個守護進程注意:如果你的守護進程是由inetd啟動的,不要這樣做!inetd完成了所有需要做的事情,包括重定向標準文件描述符,需要做的事情只有chdir() 和 umask()了 ''' def daemonize(stdin='/dev/null',stdout= '/dev/null', stderr= 'dev/null'):'''Fork當前進程為守護進程,重定向標準文件描述符(默認情況下定向到/dev/null)'''#Perform first fork.try:pid = os.fork()if pid > 0:sys.exit(0) #first parent outexcept OSError, e:sys.stderr.write("fork #1 failed: (%d) %s\n" %(e.errno, e.strerror))sys.exit(1)#從母體環境脫離os.chdir("/")os.umask(0)os.setsid()#執行第二次forktry:pid = os.fork()if pid > 0:sys.exit(0) #second parent outexcept OSError, e:sys.stderr.write("fork #2 failed: (%d) %s]n" %(e.errno,e.strerror))sys.exit(1)#進程已經是守護進程了,重定向標準文件描述符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():'''示例函數:每秒打印一個數字和時間戳'''import timesys.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 = 0while True:sys.stdout.write('%d: %s\n' %(c, time.ctime()))sys.stdout.flush()c = c+1time.sleep(1)if __name__ == "__main__":daemonize('/dev/null','/home/hzhida/daemon.log','home/hzhida/daemon.log')_example_main()

#第一個fork是為了讓shell返回,同時讓你完成setsid(從你的控制終端移除,這樣就不會意外地收到信號)。setsid使得這個進程成為“會話領導(session leader)”,即如果這個進程打開任何終端,該終端就會成為此進程的控制終端。我們不需要一個守護進程有任何控制終端,所以我們又fork一次。在第二次fork之后,此進程不再是一個“會話領導”,這樣它就能打開任何文件(包括終端)且不會意外地再次獲得一個控制終端

另外說明:
umask()函數為進程設置文件模式創建屏蔽字,并返回以前的值
在shell命令行輸入:umask 就可知當前文件模式創建屏蔽字
常見的幾種umask值是002,022和027,002阻止其他用戶寫你的文件,022阻止同組成員和其他用戶寫你的文件,027阻止同組成員寫你的文件以及其他用戶讀寫或執行你的文件
rwx-rwx-rwx 代表是777 所有的人都具有權限讀寫與執行

chmod()改變文件的權限位
int dup(int filedes) 返回新文件描述符一定是當前文件描述符中的最小數值
int dup2(int filedes, int filedes2);這兩個函數返回的新文件描述符與參數filedes共享同一個文件表項。

轉載于:https://www.cnblogs.com/hzhida/archive/2012/08/13/2635639.html

總結

以上是生活随笔為你收集整理的python fork 守护进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。