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

时间:2015-02-13 19:13:35

标签: windows cygwin

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

Cygwin FAQ提到PATH中的网络驱动器可能会导致问题,所以我尝试了PATH变量和网络连接的一些排列。下面,“完整PATH”表示我的原始路径设置; “short PATH”表示仅包含Cygwin bin目录的路径。通过time命令报告时间。

ls

的计时结果

连接到网络:

  • ls内运行bash:0.124 s
  • 在CMD中运行ls(完整PATH):41.29 s
  • 在CMD(短ls)内运行PATH:38.56 s

与网络断开连接:

  • ls内运行bash:0.125秒
  • 在CMD中运行ls(完整PATH):0.17 s
  • 在CMD(短ls)内运行PATH:0.19 s

cygcheck

的结果

我跑cygcheck -s并注意到:

Warning: There are multiple cygwin1.dlls on your path

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

netstat

的结果

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

  UDP    127.0.0.1:55030        *:*                    

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

strace结果

我在strace命令上运行了Cygwin的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=\00\00\00\00) in xxxx DC=xxxx,DC=xxxx,DC=xxxx

1 个答案:

答案 0 :(得分:21)

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

passwd:   files db
group:    files db

passwd:   files
group:    files

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