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

python daemon守護(hù)進(jìn)程實(shí)現(xiàn)

 更新時(shí)間:2016年08月27日 23:51:39   投稿:mdxy-dxy  
這篇文章主要介紹了python daemon守護(hù)進(jìn)程實(shí)現(xiàn),需要的朋友可以參考下

假如寫(xiě)一段服務(wù)端程序,如果ctrl+c退出或者關(guān)閉終端,那么服務(wù)端程序就會(huì)退出,于是就想著讓這個(gè)程序成為守護(hù)進(jìn)程,像httpd一樣,一直在后端運(yùn)行,不會(huì)受終端影響。
守護(hù)進(jìn)程英文為daemon,像httpd,mysqld,最后一個(gè)字母d其實(shí)就是表示daemon的意思。

守護(hù)進(jìn)程的編寫(xiě)步驟:

1、fork子進(jìn)程,然后父進(jìn)程退出,此時(shí)子進(jìn)程會(huì)被init進(jìn)程接管。
2、修改子進(jìn)程的工作目錄,創(chuàng)建新進(jìn)程組合新會(huì)話,修改umask。
3、子進(jìn)程再次fork一個(gè)進(jìn)程,這個(gè)進(jìn)程可以稱為孫子進(jìn)程,然后子進(jìn)程退出。
4、重定向?qū)O子進(jìn)程的標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流,標(biāo)準(zhǔn)錯(cuò)誤到/dev/null
完成上面的4個(gè)步驟,那么最終的孫子進(jìn)程就稱為守護(hù)進(jìn)程,先看下代碼,后面分析下步驟的原因。

#!/usr/bin/env python
#coding=utf8
def createDaemon():
  import os, sys, time
  #產(chǎn)生子進(jìn)程,而后父進(jìn)程退出
  try:
    pid = os.fork()
    if pid > 0:sys.exit(0)
  except OSError,error:
    print 'fork'
    sys.exit(1)
 
  #修改子進(jìn)程工作目錄
  os.chdir("/")
  #創(chuàng)建新的會(huì)話,子進(jìn)程成為會(huì)話的首進(jìn)程
  os.setsid()
  #修改工作目錄的umask
  os.umask(0)
 
  #創(chuàng)建孫子進(jìn)程,而后子進(jìn)程退出
  try:
    pid = os.fork()
    if pid > 0:
      print "Daemon PID %d"%pid
      sys.exit(0)
  except OSError,error:
    print "fork"
    sys.exit(1)
  run()
 
 
def ping():
  import os
  os.system('ping www.baidu.com >/dev/nul')
 
def run():
  while True:
    import time,threading
    fd = open('/home/ping.log', 'a')
    fd.write("start time---------:%s\n"%time.ctime())
    fd.flush()
    t=threading.Thread(target=ping,args=())
    t.start()
    time.sleep(3)
    fd.write("end of time--------:%s\n"%time.ctime())
    fd.flush()
  fd.close()
 
if __name__=='__main__':
  createDaemon()

1、fork子進(jìn)程,父進(jìn)程退出
通常,我們執(zhí)行服務(wù)端程序的時(shí)候都會(huì)通過(guò)終端連接到服務(wù)器,成功連接后會(huì)加載shell環(huán)境,終端盒shell都是進(jìn)程,shell進(jìn)程是終端進(jìn)程的子進(jìn)程,通過(guò)ps命令可以很容易的查看到,在這個(gè)shell環(huán)境下一開(kāi)始執(zhí)行的程序都是shell進(jìn)程的子進(jìn)程,自然會(huì)受到shell進(jìn)程的影響,在程序里fork子進(jìn)程后,父進(jìn)程退出,對(duì)于shell進(jìn)程來(lái)說(shuō),這個(gè)父進(jìn)程就算執(zhí)行完畢,而產(chǎn)生的子進(jìn)程會(huì)被init進(jìn)程接管,從而也就脫離了終端控制。
2.修改子進(jìn)程的工作目錄
子進(jìn)程在創(chuàng)建的時(shí)候會(huì)繼承父進(jìn)程的工作目錄,如果執(zhí)行的程序是在U盤(pán)里面,就會(huì)導(dǎo)致U盤(pán)不能卸載。
3.創(chuàng)建新會(huì)話
使用setsid后,子進(jìn)程就會(huì)成為新會(huì)話的首進(jìn)程,子進(jìn)程會(huì)成為新進(jìn)程組的組長(zhǎng)進(jìn)程,子進(jìn)程沒(méi)有控制終端。
4.修改umask
由于umask會(huì)屏蔽權(quán)限,所有設(shè)定為0,這樣可以避免讀寫(xiě)文件時(shí)碰到權(quán)限問(wèn)題
5.fork孫子進(jìn)程,子進(jìn)程退出
經(jīng)過(guò)上面幾個(gè)步驟后,子進(jìn)程會(huì)成為新的進(jìn)程組老大,可以重新申請(qǐng)打開(kāi)終端,為了避免這個(gè)問(wèn)題,fork孫子進(jìn)程處理,
6.重定向?qū)O子進(jìn)程的標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流,標(biāo)準(zhǔn)錯(cuò)誤流到/dev/null
因?yàn)槭鞘刈o(hù)進(jìn)程,本身已經(jīng)脫離了終端,那么標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)錯(cuò)誤流就沒(méi)有什么意義了,所以都轉(zhuǎn)向到/dev/null,就是丟棄的意思

我們來(lái)運(yùn)行一個(gè)這個(gè)程序,看看效果

從上圖可以看出這個(gè)腳本程序已經(jīng)放入后臺(tái),只能使用killall方式來(lái)結(jié)束掉,
接下來(lái)我們?nèi)タ聪掠涗浀娜罩?/p>

相關(guān)文章

  • 安裝Python后IDA中找不到Python模塊的問(wèn)題解決

    安裝Python后IDA中找不到Python模塊的問(wèn)題解決

    有天在一臺(tái)新PC上安裝完IDA和Python之后,啟動(dòng)IDA報(bào)找不到Python模塊的問(wèn)題,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下
    2021-10-10
  • 如何利用python?turtle繪圖自定義畫(huà)布背景顏色

    如何利用python?turtle繪圖自定義畫(huà)布背景顏色

    Turtle庫(kù)是Python語(yǔ)言中一個(gè)很流行的繪制圖像的函數(shù)庫(kù),想象一個(gè)小烏龜,在一個(gè)橫軸為x、縱軸為y的坐標(biāo)系原點(diǎn),(0,0)位置開(kāi)始,這篇文章主要給大家介紹了關(guān)于如何利用python?turtle繪圖自定義畫(huà)布背景顏色的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Python ATM功能實(shí)現(xiàn)代碼實(shí)例

    Python ATM功能實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Python ATM功能實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python調(diào)用文件時(shí)找不到相對(duì)路徑的解決方案

    python調(diào)用文件時(shí)找不到相對(duì)路徑的解決方案

    這篇文章主要介紹了python調(diào)用文件時(shí)找不到相對(duì)路徑的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python中每次處理一個(gè)字符的5種方法

    Python中每次處理一個(gè)字符的5種方法

    這篇文章主要介紹了Python中每次處理一個(gè)字符的5種方法,即把字符串分割成字符數(shù)組或把字符串切割成單獨(dú)字符的方法,需要的朋友可以參考下
    2015-05-05
  • Python使用defaultdict讀取文件各列的方法

    Python使用defaultdict讀取文件各列的方法

    這篇文章主要介紹了Python使用defaultdict讀取文件各列的方法,涉及Python針對(duì)文件相關(guān)讀取、遍歷操作技巧,需要的朋友可以參考下
    2017-05-05
  • 寶塔面板成功部署Django項(xiàng)目流程(圖文)

    寶塔面板成功部署Django項(xiàng)目流程(圖文)

    這篇文章主要介紹了寶塔面板成功部署Django項(xiàng)目流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    這篇文章主要介紹了OpenCV 圖像旋轉(zhuǎn)、平移、縮放,本文是 OpenCV圖像視覺(jué)入門(mén)之路的第7篇文章,本文詳細(xì)的進(jìn)行了圖像的縮放 cv2.resize()、旋轉(zhuǎn) cv2.flip()、平移 cv2.warpAffine()等操作,需要的朋友可以參考下
    2022-12-12
  • Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python 3.7新功能之dataclass裝飾器詳解

    Python 3.7新功能之dataclass裝飾器詳解

    這篇文章主要給大家介紹了關(guān)于Python 3.7新功能之dataclass裝飾器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04

最新評(píng)論

洪洞县| 保定市| 元谋县| 如东县| 仪征市| 额尔古纳市| 孟连| 新平| 灌阳县| 襄樊市| 如东县| 车险| 东丽区| 南木林县| 永宁县| 隆回县| 长春市| 昌都县| 荆州市| 临西县| 柳江县| 霸州市| 琼海市| 兴和县| 耒阳市| 和平区| 沁阳市| 安平县| 廉江市| 伊春市| 宁远县| 鱼台县| 东乡族自治县| 长顺县| 石台县| 大邑县| 象山县| 武山县| 鄂尔多斯市| 阳城县| 齐河县|