为什么Cygwin执行shell命令的速度非常慢?

Lcs*_*sky 18 bash cygwin

只需测试一个非常简单的命令:

while true; do bash -c "echo hello"; done
Run Code Online (Sandbox Code Playgroud)

你会发现Cygwin中的bash有多慢.有人知道为什么吗?

这是win7上cygwin 1.7的全新安装.

感谢Jared的测试理念,我将命令修改为此(添加bash -c):

time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...
real 0m7.711s //it's the problem
user 0m0.091s
sys 0m0.476s
Run Code Online (Sandbox Code Playgroud)

dot*_*otz 15

如何从您的防病毒软件中排除Cygwin路径?


Jer*_*her 7

检查你的路径.引用不存在的路径或非常慢的网络共享可能会导致您描述的症状.


met*_*hbe 7

以下是我遇到的3个可能原因.当然,未提及的其他问题也可能导致Cygwin中的shell命令缓慢.

  • 如果在"LAN设置"中有"自动检测设置"选项,Windows将使用WPAD协议来发现本地HTTP代理.首先,它将使用选项252发送DHCP"通知"请求,然后它将尝试在"wpad"上进行DNS查找.这两个操作可能需要几秒钟才能超时.

  • 如果shell访问某些路径/cygdrive/...,则会执行NetBIOS名称查询,这也可能需要一些时间.

  • 如果shell访问某些路径//mypath/...,则会执行NetBIOS名称查询,这也可能需要一些时间.

方案:

  • 禁用Windows"Internet选项"控制面板中"LAN设置"中的"自动检测设置".

  • 添加以下条目%SystemRoot%\system32\drivers\etc\hosts:

127.0.0.1 localhost cygdrive wpad

  • 确保在所有路径的开头避免使用双斜线.


Lcs*_*sky 5

最后,我找到了源 - 我办公室电脑上运行的一个名为"QQPCMgr RTP Service"的服务,它是"QQ PC Manager"的实时保护服务.

通过禁用它,问题中脚本的时间可以追溯到:

real    0m0.943s
user    0m0.105s
sys     0m0.231s
Run Code Online (Sandbox Code Playgroud)

我已经告诉QQPCMgr的开发者这个,希望他们能找到原因.

这仍然比Linux慢得多,但获得与其他cygwin计算机相同的"实时".

谢谢你们!

  • 你是怎么决定的?我找了服务,但没有看到它,我遇到了同样的问题.我在{1..10}的时间; 做bash -c"echo Hello"; 你好...真正的0m18.070s用户0m0.061s sys 0m0.385s (6认同)