热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

windowspython守护进程

#根据pid进行守护,先保存一个pidimporttimeimportosclassDemo:def__init__(self):passdefsetpid(self):#记录进程

# 根据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()

 



推荐阅读
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • This request pertains to exporting the hosted_zone_id attribute associated with the aws_rds_cluster resource in Terraform configurations. The absence of this attribute can lead to issues when integrating DNS records with Route 53. ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • 深入解析ArrayList与LinkedList的差异
    本文详细对比了Java中ArrayList和LinkedList两种常用集合类的特性、性能及适用场景,通过代码示例进行测试,并结合实际应用场景分析其优缺点。 ... [详细]
author-avatar
利威尔的黑猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有