我正在使用 Process Explorer 实用程序查看 CPU 使用率。我的 CPU 大部分时间运行在 < 5% 的水平。但是当我启动某个程序(例如 Word 或 Excel 等)时,CPU 使用率会增加(原因很明显),然后 CPU 使用率又会降到 5-6% 左右。但是当我关闭该程序时,为什么 CPU 使用率会再次增加?(过一段时间后就会降下来。)
答案1
程序的响应选择:
首先,关闭程序的方法有很多种。例如,以记事本为例。
- 如果您启动记事本,并立即告诉它关闭,那么它将关闭。
- 如果您启动记事本,键入一些内容,保存,然后告诉它关闭,那么它就会关闭。
- 如果您启动记事本,键入一些内容,然后告诉它关闭,那么它将显示一个对话框询问您是否要先保存。
- 如果选择“是”,记事本将保存该文件然后关闭。
- 如果您选择“否”,记事本将不会保存文件,然后记事本将关闭。如果您不回答,记事本将继续等待回答。
- 如果您选择“取消”,记事本将使对话框消失,并且记事本将保持打开状态。因此,即使被告知要关闭,记事本也可以选择拒绝关闭。
但是,计算器(内置于 Microsoft Windows)将会关闭。它不会先询问问题。
因此,当您告诉程序关闭或告诉操作系统关闭程序时,程序可能会决定以不同方式响应请求。这取决于程序。
但是,您可以强制终止程序。基本上,这只是不提供关闭程序的选项。例如:
-
从 CMD.EXE(命令提示符)运行
taskkill /fi "imagename eq notepad.exe"
将礼貌地要求记事本的所有副本自行关闭 taskkill /f /fi "imagename eq notepad.exe"
从 CMD.EXE(命令提示符) 运行将强制终止记事本的所有副本
记忆
当程序启动或需要更多内存时,它会告诉操作系统它需要内存。内存管理器是操作系统的一部分,它将占用计算机的部分可用内存并将其保留给程序。
当程序结束时,内存管理器需要取消保留该内存。换句话说,内存管理器需要找到指向内存各个部分的标记,并更改这些标记,以便将内存标记为可用,而不是已用完。
请记住,部分“内存”可能作为“虚拟内存”存储在磁盘上,而不是 RAM。在现代操作系统中,即使程序尚未用尽可用 RAM,计算机也可能决定这样做,如果计算机认为写入磁盘的内存将暂时处于闲置状态,而可用 RAM 可以更好地用于其他目的,例如帮助磁盘缓存使计算机运行得更快。
一旦释放该程序的内存,计算机可能会进行其他更改以有利地使用该内存,帮助继续运行的程序。
一个例子:
这有点涉及到礼貌地或强制关闭程序的话题。我经常在 Firefox 中打开几十个选项卡(通常略超过 100 个选项卡)。如果我礼貌地告诉 Firefox 关闭自己,在窗口不可见之后,程序可能仍会运行一段时间。然后,如果我尝试再次启动 Firefox,它可能会说我需要先关闭所有其他实例。我可以转到任务管理器并查看 Firefox 正在使用的内存量,通常可以超过 1 GB(“640K 对任何人来说都应该足够了”)。我可以看到 Firefox 使用的内存量以相当稳定的速度下降。不知何故,Firefox 似乎对我打开的每个选项卡做了一些事情,并一点一点地释放所需的内存。然后,当数字接近零时,Firefox 突然完全从我的正在运行程序列表中消失。此时,我可以再次重新打开 Firefox。或者,如果我强行终止 Firefox,而不是礼貌地要求它自行关闭,那么我不需要等待那么长时间就可以快速重新启动 Firefox。因此,如果有机会,Firefox 会尝试自行进行一些清理。
其他任务
如果您使用Alt-Tab切换任务,则可以看到正在运行的程序。您还可以通过查看任务管理器或从tasklist
命令提示符运行“ ”来查看进程列表(包括屏幕上不可见窗口的“应用程序”,例如“服务”)。显然,操作系统正在跟踪程序。每个程序都有一个 PID(“进程标识符”号)。
操作系统需要在程序运行后进行清理,确保一旦程序关闭,该程序就不会出现在实际正在运行的程序列表中。
如果程序有任何打开的文件,则应该释放文件句柄,以便操作系统不会认为该程序仍在使用该文件。
其中一些细节描述了 Microsoft Windows 现代版本实现的功能。可能还有更多任务,这可能取决于操作系统。(较旧的操作系统,如 MS-DOS,通常不会对一堆软件进行多任务处理(但可能有一些允许驱动程序运行的有限多任务处理)甚至可能无法实现上述所有功能。)
概括:
以上可能不是完整的列表。完整列表将根据操作系统而有所不同。但是,这确实表明,当程序退出时,操作系统会主动执行某些操作。此外,程序可能会执行一些自己选择的清理行为,而这些行为的细节可能会根据您使用的程序而有所不同。