来自CMD的Cygwin命令很慢; 从bash很快

tbh*_*man 14 windows cygwin

我一直在使用我的Windows CMD提示符中的Cygwin命令几个月没有问题.在过去几天内,每次调用Cygwin命令(ls例如)时,该命令在实际运行之前需要几秒钟才能"加载".如果我在bash提示符中尝试相同的命令,它会立即运行("加载").

Cygwin的常见问题提到了路径的网络驱动器可能会产生问题,所以我已经尽我的一些排列PATH变量和网络连接.下面,"完整PATH"表示我原来的路径设置; "short PATH"表示仅包含Cygwin bin目录的路径.通过time命令报告时间.

计时结果 ls

连接到网络:

  • 运行ls范围bash:0.124秒
  • ls在CMD内运行(完整PATH):41.29秒
  • ls在CMD内运行(短PATH):38.56秒

断开网络连接:

  • lsbash以下运行:0.125秒
  • ls在CMD内运行(完整PATH):0.17秒
  • ls在CMD内运行(短PATH):0.19秒

结果 cygcheck

我跑了cygcheck -s,注意到:

Warning: There are multiple cygwin1.dlls on your path
Run Code Online (Sandbox Code Playgroud)

虽然这可能是因为cygcheck从Cygwin的bin目录中运行.我完全卸载并重新安装Cygwin仍然看到同样的问题.

结果来自 netstat

netstat -a -n在执行Cygwin之前跑了ls并且在执行之后(当它停止时).我这样做了好几次,发现每次运行中有一行在延迟期间一直出现:

  UDP    127.0.0.1:55030        *:*                    
Run Code Online (Sandbox Code Playgroud)

端口号从测试变为测试.

strace 结果

stracels命令上运行了Cygwin's .大部分延迟都花费在以下呼叫上:

11685  886560 [main] ls 10020 pwdgrp::fetch_account_from_windows: line: <xxxx>
Run Code Online (Sandbox Code Playgroud)

12684  899244 [main] ls 10020 cyg_ldap::fetch_ad_account: No entry for (objectSid=\00\00\00\00) in xxxx DC=xxxx,DC=xxxx,DC=xxxx
Run Code Online (Sandbox Code Playgroud)

tbh*_*man 21

Cygwin常见问题解答中的一介绍了启动时间慢的情况.Cygwin最近更改为使用Active Directory查找进行身份验证,而不是使用平面文件.改变默认设置/etc/nsswitch.conf

passwd:   files db
group:    files db
Run Code Online (Sandbox Code Playgroud)

passwd:   files
group:    files
Run Code Online (Sandbox Code Playgroud)

跳过AD查找.我的Cygwin命令现在再次快速.