Python psutil模块 Process 类

psutil模块 Process 类

如果需要了解其他跟多理解的=》Python知识点合集

 

如果需要查看官方手册解读的=》Process 类

🆗,废话少说。直入主题!

注意事项

此类绑定到进程的方式是通过其唯一的PID

这意味着如果:

1:原进程终止并且操作系统重用其 PID,您可能最终会与另一个进程进行交互。

2:原进程终止并且操作系统没有重用其 PID,您可能最终会引发NoSuchProcess异常

(所以在使用之前,检查 pid 是有意义的哦!)

参数,方法

class psutil.Process(pid=None):Process类。

# 表示具有给定pid的操作系统进程。如果忽略pid,则使用当前进程pid(os.getpid())。如果pid不存在,则引发NoSuchProcess。


# pid:进程PID。这是该类的唯一(只读)属性。
# ppid():进程父PID。
# name():进程名。
# exe():作为绝对路径可执行的进程。
# cmdline():调用此进程的命令行作为字符串列表。返回值不会被缓存,因为进程的cmdline可能会改变。
# environ():把进程的环境变量作为字典。注意:这可能不反映进程启动后所做的更改。
# create_time():进程的创建时间,用浮点数表示,以自纪元以来的秒数(UTC)表示。返回值在第一次调用后缓存。
# parent():实用程序方法,该方法将父进程作为process对象返回,预先检查PID是否被重用。如果不知道父PID返回None。
# status():当前进程状态为字符串。
# cwd():将当前工作目录作为绝对路径处理。
# username():拥有该进程的用户的名称。在UNIX上,这是通过使用真正的进程uid来计算的。
# uids():此进程的真实、有效和保存的用户id作为命名元组。
# gids():该进程的真实、有效和保存的组id作为一个命名元组。
# terminal():与此进程相关联的终端(如果有),否则为None。
# io_counters():返回进程I/O统计信息作为命名元组。
# num_fds():此进程当前打开的文件的数量(非累积)。
# num_handles():此进程当前使用的句柄数(非累积)。
# num_threads():此进程当前使用的线程数(非累积)。
# threads():返回进程打开的线程作为命名元组列表,包括线程id和线程CPU时间(用户/系统)。
# cpu_times():返回一个(user, system, children_user, children_system)命名元组,表示累积的处理时间,单位为秒。
# cpu_percent(interval=None):返回一个浮点数,表示进程CPU利用率的百分比,也可以为>如果进程在不同的cpu上运行多个线程,则为100.0。
# cpu_affinity(cpus=None):获取或设置进程当前CPU关联性。CPU关联性包括告诉操作系统只在有限的CPU集上运行一个进程。如果没有传入参数,它将以整数列表的形式返回当前CPU亲和度。
                如果通过,它必须是一个指定新的cpu亲和度的整数列表。如果传递空列表,则假定(并设置)所有符合条件的cpu。
# cpu_num():返回此进程当前运行的CPU。 # memory_info():返回一个带有变量字段的命名元组,这取决于表示进程的内存信息的平台。 # memory_percent(memtype="rss"):比较进程内存与总物理系统内存,并计算进程内存使用率的百分比。Memtype参数是一个字符串,指定您想要比较的进程内存类型。
                    可以在memory_info()和memory_full_info()返回的命名元组字段名之间进行选择(默认为“rss”)。
# children(recursive=False):返回此进程的子进程作为process对象列表,预先检查PID是否被重用。如果recursive为True,则返回所有父子类。 # open_files():返回由进程打开的常规文件,作为命名元组列表。 # connections(kind="inet"):返回进程打开的套接字连接作为命名元组列表。 # is_running():返回当前进程是否在当前进程列表中运行。 # send_signal(signal):向进程发送一个信号,先检查PID是否被重用。 # suspend():用SIGSTOP信号挂起进程执行,先检查PID是否被重用。 # resume():用SIGCONT信号优先检查PID是否被重用恢复进程执行。 # terminate():使用SIGTERM信号提前终止进程,检查PID是否被重用。 # kill():通过使用SIGKILL信号先发制人地检查PID是否被重用来终止当前进程。 # wait(timeout=None):等待进程终止,如果该进程是当前进程的子进程,则返回退出码,否则为None。要等待多个进程,请使用psutil.wait_procs()。 # psutil.wait_procs(timeout=None):等待多个进程终止,如果该进程是当前进程的子进程,则返回退出码,否则为None。

使用示例

import psutil

# 获取所有正在运行的进程PID
pid_list = psutil.pids()
print(pid_list)
import psutil

# # 获取所有正在运行的进程PID
# pid_list = psutil.pids()
# print(pid_list)

# 获取指定PID的进程
p = psutil.Process(8)
print(p)
print("进程名:", p.name())
print("进程的可执行绝对路径: ", p.exe())
print("进程当前的工作目录: ", p.cwd())
print("调用此进程的命令行: ", p.cmdline())
print("进程PID: ", p.pid)
print("进程的父PID: ", p.ppid())
print("进程的子进程: ", p.children())
print("进程的父进程(对象): ", p.parent())
print("进程的父进程(列表): ", p.parents())
print("进程的状态: ", p.status())
print("拥有该进程的用户: ", p.username())
print("进程创建的时间: ", p.create_time())
print("进程累计的时间: ", p.cpu_times())
print("进程的CPU占用率: ", p.cpu_percent())
print("进程的CPU亲和性: ", p.cpu_affinity())
print("进程的内存信息: ", p.memory_info())
print("进程的内存占用率: ", p.memory_percent())
print("进程映射的内存区域: ", p.memory_maps())
print("进程的I/O信息: ", p.io_counters())
print("进程打开的文件信息: ", p.open_files())
print("进程打开的套接字连接: ", p.connections())
print("进程使用的线程数: ", p.num_threads())
print("进程打开的线程: ", p.threads())
print("进程执行的上下文切换数量: ", p.num_ctx_switches())
print("进程的优先级(带参数则可设置优先级): ", p.nice())
print("进程的I/O优先级(带参数则可设置优先级): ", p.ionice())
print("进程的环境变量: ", p.environ())
print("进程信息(字典): ", p.as_dict())
print("进程是否正在运行: ", p.is_running())

我们除了可以通过psutil获取多种进程信息。psutil的功能还有很多,它也提供了操作进程的方法,比如上例中的p.nice()和p.ionice()方法。除此之外,还有下面的这些方法可供调用。

import psutil

p = psutil.Process(8)
# 挂起进程
p.suspend()
# 恢复进程
p.resume()
# 终止进程,Windows上是kill()的别名
p.terminate()
# 杀掉进程
p.kill()
# 等待进程终止
p.wait()

简单功能

在介绍完psutil关于进程管理的内容后,利用学到的方法,来实践—杀掉系统中指定名字的所有进程。

import psutil
def kill_process_by_name(process_name):
    pl = psutil.pids()
    try:
        for pid in pl:
            if psutil.Process(pid).name() == process_name:
                psutil.Process(pid).kill()
    except Exception as e:
        print(str(e))
if __name__ == '__main__':
    kill_process_by_name('YoudaoDict.exe')

 

posted @ 2022-11-21 11:44  芒果鱼  阅读(1575)  评论(0编辑  收藏  举报