windows python 守护进程
2022/9/17 5:17:28
本文主要是介绍windows python 守护进程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 根据pid进行守护,先保存一个pid import time import os class Demo: def __init__(self): pass def setpid(self): # 记录进程号PID fo = open("pid.txt", "w") pid = str(os.getpid()) print("pid", pid) fo.write(pid) fo.flush() fo.close() return pid def execute(self): pid = self.setpid() print("启动程序,进程号:" + str(pid)) i = 1 while True: print("pid = " + pid + " ---------- run " + str(i) + " s ") time.sleep(1) i += 1 if i > 10: break print("程序关闭...") if __name__ == '__main__': demo = Demo() demo.execute()
#读取pid再进行判断 import psutil import os class Monitor: pidNotHandle = [] def __init__(self): self.pidNotHandle = list(psutil.process_iter()) # 获取当前计算机的pid def getpid(self): # 获取进程号PID fo = open("pid_.txt", "r") result = fo.read() fo.flush() fo.close() return result def execute(self): pid = [] for each in self.pidNotHandle: a = str(each) # each 是 class类型,可用type(each)查看类型 # a 数据样式为:psutil.Process(pid=0, name='System Idle Process') pid.append(a[15:-1]) # 只取括号内部分;pid=0, name='System Idle Process' status = 0 # 被监控程序进程存在状态,0不存在,1存在 for each in pid: nameposition = each.find("name") # 获取name的位置;name='System Idle Process' namevalue = each[nameposition + 6:-1] # 获取name值;System Idle Process pidposition = each.find("pid") pidvalue = each[pidposition + 4:nameposition - 2] print("name=" + namevalue + ", pid=" + pidvalue + "\n") if pidvalue == self.getpid(): status = 1 print("发现进程==============name=" + namevalue + ", pid=" + pidvalue + "\n") break if status == 0: # 进程不存在,重新启动程序 cmd = r"python test1.py" print(cmd) res = os.popen(cmd) print(res) print("重启程序.............") print("ending.............") return 0 if __name__ == '__main__': Monitor().execute()
# 如果是打包成exe的程序 import time import sys import psutil import os class MonitorServer: pidNotHandle = [] servername = "jira_Scheduler.exe" def __init__(self): self.pidNotHandle = list(psutil.process_iter()) def execute(self): pid = [] for each in self.pidNotHandle: a = str(each) pid.append(a[15:-1]) status = 0 for each in pid: nameposition = each.find("name") namevalue = each[nameposition + 6:-1].split(',')[0].replace("'","") pidposition = each.find("pid") pidvalue = each[pidposition + 4:nameposition - 2] print("name=" + namevalue + ", pid=" + pidvalue + "\n") if namevalue == self.servername: status = 1 print("发现进程==============name=" + namevalue + ", pid=" + pidvalue + "\n") break if status == 0: #如果需要重新调用exe程序,此处为在同一个路径下,且将此程序也打包为exe程序时,需要切换真实的工作路径 #如果此程序不打包,拼接此时的运行路径即可 print(os.path.join(os.path.dirname(os.path.realpath(sys.executable)), self.servername)) cmd = os.path.join(os.path.dirname(os.path.realpath(sys.executable)), self.servername) print(cmd) os.popen(cmd) time.sleep(5) print("重启程序.............") print("ending.............") return 0 if __name__ == '__main__': MonitorServer().execute()
这篇关于windows python 守护进程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识