CMD 中的 Cygwin 命令很慢;来自 bash 的速度很快

Cygwin commands from CMD are slow; from bash are fast

几个月来,我一直在 Windows CMD 提示符下使用 Cygwin 命令,没有出现任何问题。在过去的几天里,每次我调用 Cygwin 命令(例如 ls)时,该命令在实际 运行 之前需要几秒钟到 "load"。如果我在 bash 提示符下尝试相同的命令,它会立即 运行s ("loads")。

Cygwin FAQ 提到 PATH 中的网络驱动器可能会导致问题,因此我尝试了 PATH 变量和网络连接的一些排列。下面,"full PATH"表示我原来的路径设置; "short PATH"表示只有Cygwin bin目录的路径。时间通过 time 命令报告。

ls

的计时结果

已连接到网络:

已断开网络连接:

cygcheck

的结果

我 运行 cygcheck -s 并注意到:

Warning: There are multiple cygwin1.dlls on your path

尽管这可能是由于来自 Cygwin 的 bin 目录的 运行ning cygcheck。我完全卸载并重新安装了 Cygwin,但仍然看到同样的问题。

结果来自 netstat

I 运行 netstat -a -n 在执行 Cygwin 的 ls 之前和执行之后(当它停止时)。我这样做了好几次,发现每个 运行 中的一行在延迟期间始终出现:

  UDP    127.0.0.1:55030        *:*                    

端口号从测试更改为测试。

strace 结果

我 运行 Cygwin 的 strace 上的 ls 命令。大部分延迟都花在调用中,例如:

11685  886560 [main] ls 10020 pwdgrp::fetch_account_from_windows: line: <xxxx>

12684  899244 [main] ls 10020 cyg_ldap::fetch_ad_account: No entry for (objectSid=[=14=][=14=][=14=][=14=]) in xxxx DC=xxxx,DC=xxxx,DC=xxxx

Cygwin 常见问题解答中的 section 解决了启动时间慢的问题。 Cygwin 最近更改为使用 Active Directory 查找进行身份验证,而不是使用平面文件。从

更改 /etc/nsswitch.conf 中的默认值
passwd:   files db
group:    files db

passwd:   files
group:    files

跳过 AD 查找。我的 Cygwin 命令现在又变快了。