最近有很多伙伴反馈,在最新版 Windows 10 下使用 SS 客户端,打开任务管理器,会发现有大量“HTTP Auto Proxy Detection Worker Process”进程,画风如下:
即使退出 SS ,发现这些进程依然存在。根据相关资料,这个现象仅会出现在最新 1809 版的 Windows 10 上。
根本原因就是: Windows 10 的进程不自动退出, 每次从休眠过来后,SS 客户端都会再次生成不同的 PAC 地址并将其配置到 LAN 设置中。
把问题搞清楚了,解决方案基本上出来了:
- 使用全局模式;全局模式不会设置 PAC 配置脚本,也就不会拉起新的进程;
- 关闭「启用系统代理」,使用 Firefox、chrome 等浏览器的,可以直接在浏览器扩展中手动设置 socks5 代理「localhost:1080」使用 PAC 自动切换
- 使用下面修复后的 SS 客户端,生成相同的 PAC(至少未重启 SS 前 PAC 地址应一致)。
根据 @Joelism 的提示及理解,分别有下面两个方案的客户端:
- 总是生成相同的 PAC 地址,除非人工编辑”pac-secret.txt”文件。
这个方案保证不管系统休眠重启,还是退出 SS 客户端再打开,都只会有一个 HTTP Auto Proxy Detection Worker Process 进程。 -
仅当系统中无 PAC 进程运行时才生成新的 PAC 地址并设置到 LAN 中。
这个方案保证不退出 SS 客户端情况下只有一个 pacjsworker.exe 进程。缺点是如果频繁退出并重启 SS 客户端,同样会出现有大量进程的现象。
根据代码思路,我认为第二种方案更合理,是原作者想要的。
之后会发一个 pull request 到 SS 官方库,修复该问题。
问题相关网页
- https://github.com/shadowsocks/shadowsocks-windows/issues/1979
- https://github.com/XX-net/XX-Net/issues/11709
- https://github.com/shadowsocks/shadowsocks-windows/issues/2092
- https://github.com/shadowsocksrr/shadowsocksr-csharp/issues/149
- https://steamcn.com/t430331-1-1
- https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1797995