Почему Cygwin выполняет команды оболочки очень медленно? - PullRequest
17 голосов
/ 25 июля 2011

Просто протестируйте очень простую команду, такую ​​как:

while true; do bash -c "echo hello"; done

Вы увидите, насколько медленным является bash в Cygwin.Кто-нибудь знает почему?

Это свежая установка cygwin 1.7 на win7.

, благодаря идее тестирования Джареда, я изменил эту команду (добавляет 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

Ответы [ 10 ]

12 голосов
/ 07 марта 2014

Как насчет исключения путей Cygwin из вашего антивирусного программного обеспечения?

7 голосов
/ 17 сентября 2012

Ниже приведены 3 возможные причины, с которыми я столкнулся.Конечно, другие не упомянутые проблемы могут также вызывать медленные команды оболочки в Cygwin.

  • Если у вас есть опция «Автоматически определять настройки» в «Настройках локальной сети», Windows будет использовать WPAD протокол для обнаружения локального HTTP-прокси.Сначала он отправит запрос DHCP «Inform» с опцией 252, затем попытается выполнить поиск DNS на «wpad».Эти 2 операции могут занять несколько секунд.

  • Если оболочка обращается к некоторым путям, таким как /cygdrive/..., будет выполнен запрос имени NetBIOS, что также может занять некоторое время.тайм-аут

  • Если оболочка обращается к некоторым путям, таким как //mypath/..., будет выполнен запрос имени NetBIOS, что также может занять некоторое время.

Решения:

  • Отключите «Автоматическое определение настроек» в «Настройках локальной сети» на панели управления «Свойства обозревателя» Windows.

  • Добавьте следующую запись в %SystemRoot%\system32\drivers\etc\hosts:

127.0.0.1 localhost cygdrive wpad

  • Обязательно избегайте двойной косой черты в начале всех путей.
7 голосов
/ 25 июля 2011

Проверь свой путь. Ссылка на несуществующий путь или очень медленный сетевой ресурс может вызвать описываемые вами симптомы.

5 голосов
/ 22 августа 2011

Наконец, я обнаружил источник - службу с именем «QQPCMgr RTP Service», запущенную на моем офисном компьютере, это служба защиты в реальном времени «QQ PC Manager».

При отключении ее времяСценарий в вопросе возвращается к:

real    0m0.943s
user    0m0.105s
sys     0m0.231s

Я сказал разработчикам QQPCMgr об этом, надеюсь, они найдут причину.

Это все еще намного медленнее, чем Linux, но получаетто же самое «в реальном времени» других компьютеров cygwin.

Спасибо всем!

2 голосов
/ 25 июля 2011

Давайте добавим несколько цифр к нему.Я запустил следующее:

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, которое медленно по своей сути.Сам Cygwin не проблема, это дисплей, пытающийся не отставать, который замедляет работу (для этого теста).

1 голос
/ 05 сентября 2017

Вот как эта проблема проявилась у меня.Для первых, скажем, 20 команд, введенных в приглашении cygwin, это быстро, затем оно внезапно становится мучительно медленным.

Я проверил, что каждый элемент в моем пути является допустимым каталогом.

Я попытался исправить ошибку, предложенную в другом месте - https://superuser.com/questions/877051/cygwin-from-windows-very-slow-laggy/1247517.У меня это не сработало.

Я заменил свой существующий антивирусный сканер (System Center Endpoint Protection) на Sophos.Это решило проблему для меня.Надеюсь, это поможет.

1 голос
/ 28 декабря 2016

В Comodo Internet Security Premium 10 я добавил «C: \ Users \\ Documents \ MobaXterm \ slash \ bin» в список доверенных файлов. (Настройки -> Рейтинг файлов -> Список файлов). Локальный терминал снова работает быстро.

1 голос
/ 20 марта 2013

Мне удалось решить эту проблему, удалив bash-complete и переключившись с Kaspersky на Windows Security Essentials.(Я диагностировал помехи Kaspersky с помощью Process Explorer при выполнении теста «echo Hello».) Увеличил время моего теста с 7 секунд до 0,2.

1 голос
/ 25 июля 2011

Я проголосовал за Джеймса МакЛауда, потому что запуск процесса bash занимает некоторое время, но это не значит, что он будет запускать команды медленнее, чем в UNIX.

Вызов bash -c из сценария bashпочти бессмысленно, и Makefiles может вызывать много подпроцессов bash, если вы не добавите ; \ в конце команд.

Например, если Makefile имеет следующее:

echo Hello World
echo Good Bye

Это вызовет два процесса bash.Чтобы сделать это быстрее и вызвать только один процесс bash:

echo Hello World; \
echo Good Bye

Debian принял dash вместо bash в качестве основной оболочки, потому что запуск многих сценариев инициализации с использованием bash заставит систему загружаться намного дольше (каждыйскрипт вызывает свой собственный процесс bash).

1 голос
/ 25 июля 2011

Вызов bash из сценария оболочки не может быть быстрым. Это быстрее, просто использовать

while true; echo hello; done

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...