只需测试一个非常简单的命令,如:
while true; do bash -c "echo hello"; done
你会发现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
答案 0 :(得分:12)
如何从防病毒软件中排除Cygwin路径?
答案 1 :(得分:7)
检查你的路径。引用不存在的路径或非常慢的网络共享可能会导致您描述的症状。
答案 2 :(得分:7)
以下是我遇到的3个可能原因。当然,未提及的其他问题也可能导致Cygwin中的shell命令缓慢。
如果“LAN设置”中有“自动检测设置”选项,Windows将使用WPAD协议来发现本地HTTP代理。首先,它将使用选项252发送DHCP“通知”请求,然后它将尝试在“wpad”上进行DNS查找。这两个操作可能需要几秒钟才能超时。
如果shell访问某些路径,如/cygdrive/...
,将执行NetBIOS名称查询,这也可能需要一些时间。
如果shell访问某些路径,如//mypath/...
,将执行NetBIOS名称查询,这也可能需要一些时间。
解决方案:
在Windows“Internet选项”控制面板的“局域网设置”中禁用“自动检测设置”。
在%SystemRoot%\system32\drivers\etc\hosts
中添加以下条目:
127.0.0.1 localhost cygdrive wpad
答案 3 :(得分:5)
最后,我找到了源 - 我办公室电脑上运行的名为“QQPCMgr RTP Service”的服务,它是“QQ PC Manager”的实时保护服务。
通过禁用它,问题中脚本的时间可以追溯到:
real 0m0.943s
user 0m0.105s
sys 0m0.231s
我已经告诉QQPCMgr的开发者这个,希望他们能找到原因。
这仍然比Linux慢得多,但与其他cygwin计算机的“实时”相同。
谢谢大家!
答案 4 :(得分:2)
让我们给它一些数字。我运行了以下内容:
time for i in {1..1000} ; do echo "Hello" ; done
我从标准Cygwin bash窗口得到的结果是:
...
Hello
Hello
real 0m0.584s
user 0m0.031s
sys 0m0.000s
从同一系统的xterm bash窗口我得到:
...
Hello
Hello
real 0m0.037s
user 0m0.016s
sys 0m0.000s
我认为这几乎可以为你解答这个问题。问题是你正在经历像Windows一样的“cmd”窗口,这本身就很慢。 Cygwin本身并不是问题所在,它是显示器试图跟上,这会减慢速度(对于这个测试)。
答案 5 :(得分:1)
从shell脚本调用bash不是很快。使用
是否更快while true; echo hello; done
答案 6 :(得分:1)
我投了James McLeod,因为启动bash过程需要一些时间,但这并不意味着它的运行速度会慢于UNIX。
在bash脚本中调用bash -c
几乎没有意义,Makefile可以调用很多bash子进程,除非你在命令末尾添加; \
。
例如,如果Makefile具有以下内容:
echo Hello World
echo Good Bye
它将调用两个bash进程。为了加快速度并只调用一个bash进程:
echo Hello World; \
echo Good Bye
Debian采用dash而不是bash作为主shell,因为使用bash启动许多init脚本会使系统启动需要更长的时间(每个脚本调用自己的bash进程)。
答案 7 :(得分:1)
我能够通过卸载bash-completion并从Kaspersky切换到Windows Security Essentials来解决此问题。 (我在运行“echo Hello”基准时使用Process Explorer诊断卡巴斯基干扰。)将我的基准时间从7秒带到0.2。
答案 8 :(得分:1)
在Comodo Internet Security Premium 10上,我添加了" C:\ Users \\ Documents \ MobaXterm \ slash \ bin"到可信文件列表。 (设置 - >文件评分 - >文件列表)。本地终端现在又快了。
答案 9 :(得分:1)
这就是这个问题对我而言的表现。对于第一个说在cygwin提示符下输入的20个命令它很快,然后突然变得非常缓慢。
我检查了路径中的每个项目都是有效目录。
我尝试了其他地方建议的身份验证修复 - https://superuser.com/questions/877051/cygwin-from-windows-very-slow-laggy/1247517。 它对我不起作用。
我用Sophos替换了我的exisitng病毒扫描程序(System Center Endpoint Protection)。这解决了我的问题。希望这会有所帮助。
答案 10 :(得分:1)
对于Windows Defender:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender]
"DisableAntiSpyware"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection]
"DisableBehaviorMonitoring"=dword:00000001
"DisableOnAccessProtection"=dword:00000001
"DisableScanOnRealtimeEnable"=dword:00000001
或不太引人注目:
powershell -Command Add-MpPreference -ExclusionPath "C:\opt\cygwin64"
powershell -Command Add-MpPreference -ExclusionPath "C:\home"
powershell -Command Add-MpPreference -ExclusionProcess "git.exe"
powershell -Command Add-MpPreference -ExclusionExtension ".c"
powershell -Command Add-MpPreference -ExclusionExtension ".cpp"
powershell -Command Add-MpPreference -ExclusionExtension ".cxx"
对于Sophos:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Sophos Endpoint Defense\Scanning\Config" /v "OnAccessExcludeFilePaths" /t REG_MULTI_SZ /d "C:\Program Files (x86)\Sophos\Sophos Anti-Virus\\0C:\home\\0D:\Video\\" /f
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Sophos Endpoint Defense\Scanning\Config" /v "OnAccessExcludeProcessPaths" /t REG_MULTI_SZ /d "C:\opt\cygwin64\\" /f