【发布时间】:2021-07-22 05:15:32
【问题描述】:
我正在尝试编写一个程序,该程序会在新进程启动时通知我。
我的第一个想法是在 python 中使用 psutil 并使用 sched 检查后台进程中的进程数,使其每 5 秒检查一次。
但是,获取新进程的进程 ID 有点复杂,因为我必须保存所有正在运行的进程的列表,并在五秒钟后将其与新列表进行比较。然后找出差异,获取新进程的id。
这似乎真的无效。
有没有人知道一种更有效的方法来检查新进程并在它们启动时获取它们的进程 ID?我想最好的方法是学习如何在 windows api 中执行此操作,但 python 会容易得多。
提前致谢。
【问题讨论】:
-
如果将进程 ID 列表转换为 python
set对象,则可以通过单个函数调用将新集与旧集进行比较。您的“非常无效”的方法大约需要一行代码。 -
你认为如果我每 5 秒比较两组与 300 多个对象,它不会减慢系统速度?也许没关系,因为只有大约 300 个对象。听听是否有更有效的方法来处理这个问题仍然很有趣。
-
当然会:-)。您运行的任何程序都会为其他程序减慢系统速度。但是您说的是在以千兆赫兹速度运行的处理器上进行 300 次整数比较。仅仅刷新屏幕就需要数百万次操作,而所需的时间对用户来说是不明显的。
-
我发现psutil.process_iter()对象生成器中有一个开始时间信息。所以我的新想法是在进程开始时间列表中搜索当前时间的间隔,以获取最近启动的 pcId。我仍然觉得应该有更好的方法来做到这一点。
-
注册以获得有关进程创建和终止的通知。例如,WMI 可用于此目的。
标签: python windows process psutil