每个程序都是一个进程或者多个进程,除去系统占用资源其他都被这些进程占用,比如我们的web服务,数据库等;很多情况下因为程序自身问题,会导致CPU运行100%,内存耗尽,磁盘写满,最后导致服务崩溃,我们可以通过psutil下面2个方法获取进程相关信息,还是使用之前学习过的psutil模块,之前的笔记可以通过https://sulao.cn/post/4.html查看,下面我们来看今天要学习的主要方法
方法 | 说明 |
---|---|
psutil.pids() | 获取进程ID(每个进程都有唯一ID) |
psutil.Process(pid) | 根据进程ID获取进程Process对象 |
我们直接来看下列子
#!/usr/bin/python #coding: utf-8 import psutil import os import signal pid = psutil.pids() p = psutil.Process(pid[1]) print("*"*50) print("进程名称:", p.name()) print("进程状态:", p.status()) print("创建时间:", p.create_time()) print("CPU时间:", p.cpu_times()) print("内存信息:", p.memory_percent()) print("内存使用:", p.memory_info()) print("IO信息:", p.io_counters()) print("线程数:", p.num_threads())
打印结果
************************************************** 进程名称: System 进程状态: running 创建时间: 1569289205.0 CPU时间: pcputimes(user=0.0, system=491.296875, children_user=0.0, children_system=0.0) 内存信息: 0.039387924162615856 内存使用: pmem(rss=6709248, vms=212992, num_page_faults=32872, peak_wset=11702272, wset=6709248, peak_paged_pool=0, paged_pool=0, peak_nonpaged_pool=272, nonpaged_pool=272, pagefile=212992, peak_pagefile=266240, private=212992) IO信息: pio(read_count=179, write_count=3050, read_bytes=34988255, write_bytes=109457542, other_count=133361, other_bytes=4927296) 线程数: 337
我们也可以使用循环打印出所有进程名
for pid in psutil.pids(): try: p = psutil.Process(pid) print(p.status()) except Exception as e: print(e)
当然查到了进程ID,我们可以kill掉,需要使用signal模块
os.kill(pid, signal.SIGILL)