每次电脑熄屏,进入闲置状态时,硬盘都会狂写,今天终于被我抓了一个现场。

2023-11-23 15:02:31 +08:00
 tool2d
问题是只要我一动鼠标,开启屏幕,硬盘读写症状就会完全消失。这时候打开任务管理器,也是看不到任何异常状态,就和躲猫猫一样。

但是我非常好奇,究竟是哪一个进程干扰了正常休眠。借助 GPT 的能力,写了一个监控 BAT 脚本:

:_start
typeperf -qx Process | find "IO Read Bytes/sec" > iotest.txt
typeperf -f CSV -o iotest.csv -si 5 -sc 5 -cf iotest.txt
goto :_start

抓过来一看,好嘛,竟然是 VS 的静默 Update 服务,所谓“静默”,就是你电脑必须完全闲置,它才会开始下载,这设计逻辑,我也是服。

3646 次点击
所在节点    Windows
17 条回复
xuanbg
2023-11-23 15:25:51 +08:00
windows 的更新从来都是在你不用电脑的时候进行的。不和你抢资源,你还觉得不好?
aleimu
2023-11-23 15:29:51 +08:00
还有 win 自己更新服务
tool2d
2023-11-23 15:31:53 +08:00
@xuanbg 主要是不知道哪个程序,我安装过 VS 后,很少打开,直接给忘了。

直觉上猜测是微软后台搞的鬼,本来以为是磁盘文件读取到内存,建立后台高速缓存。没想到是万年不用的 VS 。
EVANGELIONAir
2023-11-23 15:33:23 +08:00
我不懂,和 op 说的类似的情况,比如磁盘碎片整理 trim 日志维护.net 缓存等一堆任务都是不应该存在于地球上的?
tool2d
2023-11-23 15:36:43 +08:00
@EVANGELIONAir 你说的这些后台任务都是可预见的,我烦的是偷偷下载,你至少要给一个提示吧?

或者说,我已经好几个月没打开过 VS 了,但是更新任务几乎每隔几天就有。
EVANGELIONAir
2023-11-23 16:00:00 +08:00
@tool2d 这按钮都让你自己选了还叫偷偷下载啊?更何况 VS 从 17 开始的更新都是在 installer 问你要不要更新的
tool2d
2023-11-23 16:03:44 +08:00
@EVANGELIONAir 我说了几个月没打开过 vs ,压根就没想到是 vs 的后台。

不抓取系统日志,估计永远都找不出这个内鬼。

我认为正常的更新流程,至少你要启动一下主程序,而不是安装完后,永远在后台静默下载。
wanmyj
2023-11-23 16:38:06 +08:00
虽然微软罪大恶极,用户怨声载道,但感觉 Op 应该多了解一下 Service 的概念。。。
tool2d
2023-11-23 17:40:28 +08:00
@wanmyj 这个不是 service ,是一个叫 BackgroundDownload.exe 独立程序,由隐藏很深的 Task Scheduler 所触发,触发条件竟然是 when computer is idle 。
xmt328
2023-11-24 09:42:48 +08:00
@tool2d #9 这个隐藏不深啊,很多定时任务都是靠这个启动的
tool2d
2023-11-24 09:51:23 +08:00
@xmt328 也可能我对 task scheduler 不熟悉,不知道怎么列出所有 task 。

只能按照树状结构,一个个点进去。隐藏深是指目录结构比较深。
ktyang
2023-11-24 10:07:04 +08:00
公司电脑一闲置 CPU 、硬盘和散热风扇就起飞,借脚本抓抓看~到底是公司的监控还是巨硬让电脑待机比使用功耗还高~
SHF
2023-11-24 11:34:41 +08:00
提个问题,有什么方法可以列出所有 "when computer is idle" 情况下自动运行的任务?我也不想有我不知道的任务偷偷运行。
hez2010
2023-11-24 12:07:42 +08:00
@tool2d @SHF 打开 PowerShell ,执行:
Get-ScheduledTask | ? { ($_.Triggers | % { $_.CimClass.CimClassName }) -contains "MSFT_TaskIdleTrigger" }
就能列出来所有的 "when computer is idle" 任务。
hez2010
2023-11-24 12:09:52 +08:00
@hez2010 不过这样会把已经禁用的 Task (即不会执行)一并列出来。
如果只想列出来有效的 Task 的话,可以执行这个:
Get-ScheduledTask | ? { ($_.Triggers | % { $_.CimClass.CimClassName }) -contains "MSFT_TaskIdleTrigger" -and $_.State -ne "Disabled" }
SHF
2023-11-25 10:47:01 +08:00
@hez2010 #15 非常感谢,很好用,禁用了一堆垃圾

D:/> Get-ScheduledTask | ? { ($_.Triggers | % { $_.CimClass.CimClassName }) -contains "MSFT_TaskIdleTrigger" -and $_.State -ne "Disabled" }

TaskPath TaskName State
-------- -------- -----
\ RNIdle Task Ready
\Microsoft\Office\ Office Automatic Updates 2.0 Ready
\Microsoft\VisualStudio\Updates\ BackgroundDownload Ready
\Microsoft\XblGameSave\ XblGameSaveTask Ready
flynaj
98 天前
计划任务里面有很多都是空虚的时候执行的,进行磁盘整理文件优化这个默认就启用的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/994530

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX