python定時(shí)檢測(cè)無響應(yīng)進(jìn)程并重啟的實(shí)例代碼
總有一些程序在windows平臺(tái)表現(xiàn)不穩(wěn)定,動(dòng)不動(dòng)一段時(shí)間就無響應(yīng),但又不得不用,每次都是發(fā)現(xiàn)問題了手動(dòng)重啟,現(xiàn)在寫個(gè)腳本定時(shí)檢測(cè)進(jìn)程是否正常,自動(dòng)重啟。
涉及知識(shí)點(diǎn)
- schedule定時(shí)任務(wù)調(diào)度
- os.popen運(yùn)行程序并讀取解析運(yùn)行結(jié)果
代碼分解
腳本主入口
if __name__ == '__main__':
#每5秒執(zhí)行檢查任務(wù)
schedule.every(5).seconds.do(check_job)
#此處固定寫法,意思是每秒鐘schedule看下是否有pending的任務(wù),有就執(zhí)行
while True:
schedule.run_pending()
time.sleep(1)
schedule的其它示例
import schedule
import time
def job(message='stuff'):
print("I'm working on:", message)
#每10分鐘
schedule.every(10).minutes.do(job)
#每小時(shí)
schedule.every().hour.do(job, message='things')
#每天10點(diǎn)30分
schedule.every().day.at("10:30").do(job)
while True:
schedule.run_pending()
time.sleep(1)
檢查無響應(yīng)進(jìn)程并重啟
def check_job():
process_name = "xx.exe"
not_respond_list = list_not_response(process_name)
if len(not_respond_list) <= 0:
return
pid_params = " ".join(["/PID " + pid for pid in not_respond_list])
os.popen("taskkill /F " + pid_params)
if len(list_process(process_name)) <= 0:
start_program(r'E:\xx\xx.exe')
}
查找符合條件的進(jìn)程列表
def list_process(process_name, not_respond=False):
cmd = 'tasklist /FI "IMAGENAME eq %s"'
if not_respond:
cmd = cmd + ' /FI "STATUS eq Not Responding"'
output = os.popen(cmd % process_name)
return parse_output(output.read())
def list_not_response(process_name):
return list_process(process_name, True)
解析命令執(zhí)行結(jié)果
def parse_output(output):
print(output)
pid_list = []
lines = output.strip().split("\n")
if len(lines) > 2:
for line in lines[2:]:
pid_list.append(line.split()[1])
return pid_list
tasklist示例輸出
映像名稱 PID 會(huì)話名 會(huì)話# 內(nèi)存使用 ========================= ======== ================ =========== ============ WizChromeProcess.exe 1620 Console 1 32,572 K
完整代碼
import os
import time
import schedule
def parse_output(output):
print(output)
pid_list = []
lines = output.strip().split("\n")
if len(lines) > 2:
for line in lines[2:]:
pid_list.append(line.split()[1])
return pid_list
def list_not_response(process_name):
return list_process(process_name, True)
def list_process(process_name, not_respond=False):
cmd = 'tasklist /FI "IMAGENAME eq %s"'
if not_respond:
cmd = cmd + ' /FI "STATUS eq Not Responding"'
output = os.popen(cmd % process_name)
return parse_output(output.read())
def start_program(program):
os.popen(program)
def check_job():
process_name = "xx.exe"
not_respond_list = list_not_response(process_name)
if len(not_respond_list) <= 0:
return
pid_params = " ".join(["/PID " + pid for pid in not_respond_list])
os.popen("taskkill /F " + pid_params)
if len(list_process(process_name)) <= 0:
start_program(r'E:\xxx\xx.exe')
if __name__ == '__main__':
schedule.every(5).seconds.do(check_job)
while True:
schedule.run_pending()
time.sleep(1)
總結(jié)
以上所述是小編給大家介紹的python定時(shí)檢測(cè)無響應(yīng)進(jìn)程并重啟的實(shí)例代碼 ,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- Python對(duì)Tornado請(qǐng)求與響應(yīng)的數(shù)據(jù)處理
- Python爬蟲庫(kù)requests獲取響應(yīng)內(nèi)容、響應(yīng)狀態(tài)碼、響應(yīng)頭
- python按鍵按住不放持續(xù)響應(yīng)的實(shí)例代碼
- Python按鈕的響應(yīng)事件詳解
- 關(guān)于python下cv.waitKey無響應(yīng)的原因及解決方法
- python通過get,post方式發(fā)送http請(qǐng)求和接收http響應(yīng)的方法
- Python響應(yīng)對(duì)象text屬性亂碼解決方案
相關(guān)文章
Python+Opencv實(shí)現(xiàn)圖像模板匹配詳解
模板匹配可以看作是對(duì)象檢測(cè)的一種非常基本的形式。使用模板匹配,我們可以使用包含要檢測(cè)對(duì)象的“模板”來檢測(cè)輸入圖像中的對(duì)象。本文為大家介紹了圖像模板匹配的實(shí)現(xiàn)方法,需要的可以參考一下2022-09-09
python3 pathlib庫(kù)Path類方法總結(jié)
這篇文章主要介紹了python3 pathlib庫(kù)Path類方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
python 在指定范圍內(nèi)隨機(jī)生成不重復(fù)的n個(gè)數(shù)實(shí)例
今天小編就為大家分享一篇python 在指定范圍內(nèi)隨機(jī)生成不重復(fù)的n個(gè)數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Django序列化中SerializerMethodField的使用詳解
這篇文章主要介紹了Django序列化中SerializerMethodField的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
pytorch 實(shí)現(xiàn)L2和L1正則化regularization的操作
這篇文章主要介紹了pytorch 實(shí)現(xiàn)L2和L1正則化regularization的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03

