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

首頁 > 編程 > Python > 正文

使用Python編寫Linux系統守護進程實例

2020-02-23 06:22:42
字體:
來源:轉載
供稿:網友

守護進程(daemon)是指在UNIX或其他多任務操作系統中在后臺執行的電腦程序,并不會接受電腦用戶的直接操控。此類程序會被以進程的形式初始化。通常,守護進程沒有任何存在的父進程(即PPID=1),且在UNIX系統進程層級中直接位于init之下。守護進程程序通常通過如下方法使自己成為守護進程:對一個子進程調用fork,然后使其父進程立即終止,使得這個子進程能在init下運行。–維基百科

守護進程區別于普通用戶登陸系統后運行的進程,它是直接由系統初始化,和系統用戶沒有關系,而用戶開啟的進程依存與用戶連接的終端,當終端退出或斷開,進程也會隨著終止。
來看一下我Linux試驗機的進程狀態:

[root@home tmp]# ping www.baidu.com > /dev/null &[1] 2759[root@home tmp]# pstree -psystemd(1)-+-agetty(157)      |-agetty(163)      |-avahi-daemon(129)---avahi-daemon(134)      |-avahi-dnsconfd(125)      |-crond(121)      |-dbus-daemon(130)      |-haveged(128)      |-ifplugd(126)      |-nginx(226)---nginx(227)      |-ntpd(223)      |-python(2727)      |-rngd(124)      |-sshd(216)---sshd(2683)---bash(2690)-+-ping(2759)      |                   `-pstree(2760)      |-systemd(2687)---(sd-pam)(2688)      |-systemd-journal(76)      |-systemd-logind(127)      |-systemd-udevd(89)      `-wpa_supplicant(153)

可以看到,當前有一個ping程序在后臺運行,如果如斷開連接,再次去登陸,ping程序是已經終止了的。也就是說,普通進程,和用戶會話相關,那么,如何去編寫一個和用戶會話無關,一直運行在后臺的進程呢?大家可能注意到了上面pid為2727的python,如果只是正常打開python,它應該是運行在bash下的,而這里卻直接運行在systemd下,實際上,它是一個守護進程,來看一下python編寫linux守護進程的簡單實現:

#!/usr/bin/env pythonimport osimport signalimport timelogfile="/tmp/daemon.log"pid=os.fork()#exit parent processif pid: exit()#get the pid of subprocessdaeid=os.getpid()os.setsid()os.umask(0)os.chdir("/")#Redirection file descriptorfd=open("/dev/null","a+")os.dup2(fd.fileno(),0)os.dup2(fd.fileno(),1)os.dup2(fd.fileno(),2)fd.close()log=open(logfile,'a')log.write('Daemon start up at %s/n'%(time.strftime('%Y:%m:%d',time.localtime(time.time()))))log.close()def reload(a,b):  log=open(logfile,'a')  log.write('Daemon reload at %s/n'%(time.strftime('%Y:%m:%d',time.localtime(time.time()))))  log.close()while True:  signal.signal(signal.SIGHUP,reload)  time.sleep(2)

要點是利用linux中,當一個進程的父進程終止是,系統會接管這個進程,讓init成為這個進程的父進程,這時候這個進程就成為了一個守護進程。需要注意的是,通過setsid,umask和chdir做工作目錄設置、關閉文件描述符、設置文件創建掩碼等操作。把上面的代碼保存起來,給于運行權限,并用python打開,就會看到有一個新的守護進程在運行,并且能夠處理系統發送的SIGHUP信號。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三门县| 来宾市| 新沂市| 黔江区| 康平县| 泊头市| 宝鸡市| 东莞市| 梧州市| 马边| 新安县| 阿克| 乌兰县| 靖宇县| 迭部县| 珠海市| 西昌市| 武功县| 南昌县| 潜江市| 赣州市| 新安县| 南和县| 台东县| 得荣县| 永善县| 林芝县| 阿克| 商河县| 白沙| 沽源县| 孝义市| 萝北县| 深州市| 徐水县| 泾阳县| 宁国市| 北碚区| 林州市| 丰顺县| 宜良县|