最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例

 更新時間:2015年02月03日 11:59:31   投稿:junjie  
這篇文章主要介紹了使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例,本文先是講解了什么是守護(hù)進(jìn)程,然后給出了一個Python語言的簡單實(shí)現(xiàn),需要的朋友可以參考下

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

守護(hù)進(jìn)程區(qū)別于普通用戶登陸系統(tǒng)后運(yùn)行的進(jìn)程,它是直接由系統(tǒng)初始化,和系統(tǒng)用戶沒有關(guān)系,而用戶開啟的進(jìn)程依存與用戶連接的終端,當(dāng)終端退出或斷開,進(jìn)程也會隨著終止。
來看一下我Linux試驗(yàn)機(jī)的進(jìn)程狀態(tài):

[root@home tmp]# ping www.baidu.com > /dev/null &
[1] 2759
[root@home tmp]# pstree -p
systemd(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)

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

#!/usr/bin/env python
import os
import signal
import time
logfile="/tmp/daemon.log"
pid=os.fork()
#exit parent process
if pid: exit()
#get the pid of subprocess
daeid=os.getpid()
os.setsid()
os.umask(0)
os.chdir("/")
#Redirection file descriptor
fd=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)

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

以上程序僅用來測試,僅能夠處理系統(tǒng)SIGHUP信號,請使用kill pid結(jié)束進(jìn)程。

相關(guān)文章

  • OpenCV-Python?對圖像的基本操作代碼

    OpenCV-Python?對圖像的基本操作代碼

    這篇文章主要介紹了OpenCV-Python?對圖像的基本操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 講解Python的Scrapy爬蟲框架使用代理進(jìn)行采集的方法

    講解Python的Scrapy爬蟲框架使用代理進(jìn)行采集的方法

    這篇文章主要介紹了講解Python的Scrapy爬蟲框架使用代理進(jìn)行采集的方法,并介紹了隨機(jī)使用預(yù)先設(shè)好的user-agent來進(jìn)行爬取的用法,需要的朋友可以參考下
    2016-02-02
  • pygame學(xué)習(xí)筆記(4):聲音控制

    pygame學(xué)習(xí)筆記(4):聲音控制

    這篇文章主要介紹了pygame學(xué)習(xí)筆記(4):聲音控制,本文講解了pygame.mixer啟動與初始化、播放聲音片段wav文件、播放mp3、wma、ogg音樂文件、控制音量、制作mp3播放器中遇到的問題等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Python批量刪除txt文本指定行的思路與代碼

    Python批量刪除txt文本指定行的思路與代碼

    在深度學(xué)習(xí)項(xiàng)目中常常會處理各種數(shù)據(jù)集,下面這篇文章主要給大家介紹了關(guān)于Python批量刪除txt文本指定行的思路與代碼,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Python單元測試與測試用例簡析

    Python單元測試與測試用例簡析

    這篇文章主要介紹了Python單元測試與測試用例,結(jié)合簡單實(shí)例形式分析了Python單元測試相關(guān)的原理、步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • 對python中的os.getpid()和os.fork()函數(shù)詳解

    對python中的os.getpid()和os.fork()函數(shù)詳解

    今天小編就為大家分享一篇對python中的os.getpid()和os.fork()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python?Numpy布爾數(shù)組在數(shù)據(jù)分析中的應(yīng)用小結(jié)

    Python?Numpy布爾數(shù)組在數(shù)據(jù)分析中的應(yīng)用小結(jié)

    本文深入探討了Python的Numpy庫中的布爾數(shù)組功能,介紹了布爾運(yùn)算、布爾索引的使用方法,并通過示例展示了如何在數(shù)據(jù)分析中利用布爾數(shù)組進(jìn)行數(shù)據(jù)篩選和處理,感興趣的朋友一起看看吧
    2024-09-09
  • python重復(fù)值處理得方法

    python重復(fù)值處理得方法

    這篇文章主要介紹了python重復(fù)值處理得方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • pygame游戲之旅 添加鍵盤按鍵的方法

    pygame游戲之旅 添加鍵盤按鍵的方法

    這篇文章主要為大家詳細(xì)介紹了pygame游戲之旅的第4篇,教大家如何添加鍵盤按鍵,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python屬于跨平臺語言碼

    python屬于跨平臺語言碼

    在本篇文章里小編給大家整理的是關(guān)于python是否跨平臺的相關(guān)知識點(diǎn)文章,有興趣的朋友們可以參考下。
    2020-06-06

最新評論

星子县| 年辖:市辖区| 库尔勒市| 惠州市| 宿迁市| 洪泽县| 麻栗坡县| 九台市| 雅江县| 义乌市| 隆子县| 绵竹市| 微山县| 五指山市| 渭源县| 土默特右旗| 顺昌县| 巴青县| 桐梓县| 广水市| 蓬溪县| 封开县| 东乡县| 张家界市| 南投市| 万年县| 长岛县| 郓城县| 谢通门县| 南郑县| 平武县| 嘉定区| 盱眙县| 元朗区| 德格县| 天门市| 南投县| 沂水县| 甘德县| 元江| 济南市|