用Python給Linux編寫守護程序

2021-06-25 11:27:33 字數 854 閱讀 3667

守護程序(daemon)是指在unix或其他多工作業系統中在後台執行的電腦程式,並不會接受電腦使用者的直接操控。此類程式會被以程序的形式初始化。通常,守護程序沒有任何存在的父程序(即ppid=1),且在unix系統程序層級中直接位於init之下。守護程序程式通常通過如下方法使自己成為守護程序:對乙個子程序呼叫fork,然後使其父程序立即終止,使得這個子程序能在init下執行。–維基百科

守護程序區別於普通使用者登陸系統後執行的程序,它是直接由系統初始化,和系統使用者沒有關係,而使用者開啟的程序依存與使用者連線的終端,當終端退出或斷開,程序也會隨著終止。

來看一下我linux試驗機的程序狀態:

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

要點是利用linux中,當乙個程序的父程序終止是,系統會接管這個程序,讓init成為這個程序的父程序,這時候這個程序就成為了乙個守護程序。需要注意的是,通過setsid,umask和chdir做工作目錄設定、關閉檔案描述符、設定檔案建立掩碼等操作。把上面的**儲存起來,給於執行許可權,並用python開啟,就會看到有乙個新的守護程序在執行,並且能夠處理系統傳送的sighup訊號。

以上程式僅用來測試,僅能夠處理系統sighup訊號,請使用kill pid結束程序。

用 Python 編寫網路爬蟲 筆記

每個 都應該提供 api,然而這是不可能的 即使提供了 api,往往也會限速,不如自己找介面 robots.txt 中可能會有陷阱 sitemap 中可能提供了重要的鏈結 乙個簡便方法是使用 site example.com 查詢,然而這種方法對於大戰不適用 builtwith 模組 pip ins...

用python來編寫TSP問題

import math from os import path import numpy as np import matplotlib.pyplot as plt class tspinstance 設計乙個類,實現從檔案讀入乙個旅行商問題的例項 檔案格式為 city number best kn...

用python編寫串列埠測試指令碼

用python編寫串列埠測試指令碼 最近接到了乙個測試硬體的內容,有大概十臺左右,給了乙個串列埠測試的文件,讓我來測硬體,測試的前兩天使用的手工測試,實在有點麻煩,晚上加班寫了個指令碼來簡單的自動執行一下。import serial.tools.list ports import time impo...