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')