python监控进程状态,记录重启时间及进程号的实例

Python 可以通过 psutil 模块监控进程状态,记录进程号和重启时间。

安装 psutil 模块

psutil 模块可以通过 pip 安装,运行以下命令:

pip install psutil

获取进程状态和进程号

可以通过 psutil 模块的 process_iter() 方法获取正在运行的进程列表。以下是一个示例:

import psutil

for proc in psutil.process_iter():
    try:
        # 获取进程
        p = psutil.Process(proc.pid)

        # 获取进程命令
        cmd = p.cmdline()

        # 获取进程状态
        status = p.status()

        # 获取进程号
        pid = p.pid

        print(f"process cmd: {cmd}, status: {status}, pid: {pid}")

    except (psutil.AccessDenied, psutil.NoSuchProcess):
        pass

上述代码可以得到当前系统中所有进程的命令、状态和进程号。

记录重启时间

记录进程重启时间的一种方法是使用日志记录器。可以使用 Python 自带的日志模块实现。以下是一个示例:

import logging
import time

logging.basicConfig(
    filename='process.log',
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('process')

while True:
    try:
        # 获取当前时间和进程号
        now = time.time()
        pid = psutil.Process(process_id).pid

        # 如果进程号与上次不同,则记录重启时间
        if pid != prev_pid:
            logger.info(f'process {prev_pid} restarted at {time.ctime(prev_time)}')
            prev_time = now
            prev_pid = pid

        time.sleep(1)
    except psutil.NoSuchProcess:
        # 进程已停止,结束循环
        break

上述代码在不间断地运行时,如果进程号与上次不同,则记录重启时间。日志写入文件 process.log 中。

实例1 - 监控Python进程

以下是一个示例,可以使用 psutil 模块监控 Python 进程,并记录重启时间和进程号。

import logging
import psutil
import time

logging.basicConfig(
    filename='python_process.log',
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('python_process')

while True:
    try:
        # 获取 Python 进程
        process_name = 'python'
        for proc in psutil.process_iter():
            try:
                p = psutil.Process(proc.pid)
                if process_name in p.name():
                    process_id = p.pid
                    break
            except (psutil.AccessDenied, psutil.NoSuchProcess):
                pass

        # 获取当前时间和进程号
        now = time.time()
        pid = psutil.Process(process_id).pid

        # 如果进程号与上次不同,则记录重启时间
        if pid != prev_pid:
            logger.info(f'process {prev_pid} restarted at {time.ctime(prev_time)}')
            prev_time = now
            prev_pid = pid

        time.sleep(1)
    except psutil.NoSuchProcess:
        # 进程已停止,结束循环
        break

上述代码监控 Python 进程的重启,并将日志写入文件 python_process.log 中。

实例2 - 监控多进程并发

以下是一个示例,可以监控多进程 Python 程序并发执行的情况,记录每个进程号的重启时间和状态。

import logging
import psutil
import time
import multiprocessing as mp

logging.basicConfig(
    filename='multi_python_process.log',
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('multi_python_process')

def process_monitor(process_id, prev_pid, prev_time):
    while True:
        try:
            # 获取当前时间和进程号
            now = time.time()
            pid = psutil.Process(process_id).pid

            # 如果进程号与上次不同,则记录重启时间
            if pid != prev_pid:
                logger.info(f'process {prev_pid} restarted at {time.ctime(prev_time)}')
                prev_time = now
                prev_pid = pid

            # 获取进程状态
            status = psutil.Process(process_id).status()
            logger.info(f'process {pid} status: {status}')

            time.sleep(1)
        except psutil.NoSuchProcess:
            # 进程已停止,结束循环
            break

if __name__ == '__main__':
    # 启动多个 Python 进程
    processes = []
    for i in range(5):
        p = mp.Process(target=process_function, args=(i,))
        p.start()
        processes.append(p)

    # 监控进程状态和重启时间
    prev_pids = [-1] * 5
    prev_times = [0] * 5
    while True:
        try:
            for i, p in enumerate(processes):
                # 获取 Python 进程的进程号
                process_id = p.pid

                # 如果进程号与上次不同,则记录重启时间
                if process_id != prev_pids[i]:
                    logger.info(f'process {prev_pids[i]} restarted at {time.ctime(prev_times[i])}')
                    prev_times[i] = time.time()
                    prev_pids[i] = process_id

                time.sleep(1)
        except KeyboardInterrupt:
            # 中断程序
            break

    # 结束 Python 进程
    for p in processes:
        p.terminate()
        p.join()

上述代码监控多进程 Python 程序的重启和进程状态,并将日志写入文件 multi_python_process.log 中。可以修改进程数量和进程函数 process_function 来适应不同的需要。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python监控进程状态,记录重启时间及进程号的实例 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python常见模块与用法

    Python 常见模块与用法 Python 作为一门强大的编程语言,在其强大的生态系统中拥有着海量的模块和库,供我们选择。本文将介绍一些 Python 常见的模块与用法及示例代码。 一、math 模块 math 模块提供了许多数学运算功能,包括三角函数、指数函数、对数函数、常数等等。 1.1 三角函数 例: import math print("s…

    python 2023年5月13日
    00
  • Python urllib模块urlopen()与urlretrieve()详解

    Python urllib模块urlopen()与urlretrieve()详解 urllib是Python中的一个标准库,提供了访问URL的方法。其中,urllib.request模块提供了urlopen()和urlretrieve()函数,可以用于打开URL和下载文件。在本文中,我们将详细介绍这两个函数的使用方法和示例。 urlopen()函数 urlo…

    python 2023年5月15日
    00
  • Python字符串拼接、截取及替换方法总结分析

    下面是详细的攻略: Python字符串拼接、截取及替换方法总结分析 在Python中,字符串是一种常见的数据类型,我们经常需要对字符串进行拼接、截取和替换等操作。本文将总结Python字符串拼接、截取及替换方法,并提供两个示例说明。 字符串拼接 在Python中,我们可以使用加号(+)或join方法来进行字符串拼接。下面是一个示例,演示如何使用加号进行字符串…

    python 2023年5月14日
    00
  • 基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)

    下面我将为您详细讲解 “基于Python实现自动化办公学习笔记(CSV、Word、Excel、PPT)”的完整实例教程。此教程旨在帮助Python初学者或者需要进行办公自动化处理的用户,提高办公效率、减少重复性工作和避免人为误差。 一、实现功能 针对常见的办公软件CSV、Word、Excel、PPT,通过Python脚本实现以下功能: CSV:读取CSV文件…

    python 2023年5月13日
    00
  • Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法

    要实现Python MongoDB插入数据时已存在则不执行,不存在则插入的功能,可以使用MongoDB的upsert操作符和update_one()方法,该方法可以对满足指定查询条件的记录执行update操作,并且如果不存在满足条件的记录,则会插入一条新纪录。 具体步骤如下: 确定需要插入的集合和文档数据,例如: collection = db["…

    python 2023年6月5日
    00
  • 5款实用的python 工具推荐

    5款实用的Python工具推荐 1. virtualenv virtualenv是Python环境管理工具,用于解决不同项目使用不同依赖库版本的问题。它可以在同一台机器上创建多个Python环境,每个环境都拥有自己的依赖库。当一个新项目开始时,可以使用虚拟环境来避免与系统或其他项目的依赖库版本冲突。使用virtualenv的示例: 示例1 首先,安装virt…

    python 2023年5月19日
    00
  • python中文件操作与异常的处理图文详解

    当我们在Python中进行文件操作和异常处理时,需要掌握一些基本的知识点。本文将详细讲解Python中文件操作和异常处理的相关知识点,并提供示例代码进行说明。 文件操作 开文件 在Python中,使用open()函数打开文件。以下是打开文件的示例代码: f = open(‘file.txt’, ‘r’) 在以上代码中,我们使用open()函数打开一个名为fi…

    python 2023年5月13日
    00
  • Python之日期与时间处理模块(date和datetime)

    Python之日期与时间处理模块(date和datetime) 在Python中日期和时间处理非常方便,Python标准库提供了两个重要的模块date和datetime。本篇文章将详细介绍如何使用这两个模块,并通过示例展示具体的使用方法。 date模块 date模块提供了一个date类,该类表示一个简单的日期对象,包含年月日的信息。 创建日期对象 使用dat…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部