Подтвердить что ты не робот

Почему Cygwin выполняет команды оболочки очень медленно?

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

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

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

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

благодаря идее тестирования Jared, я изменил команду на это (добавляет bash -c):

time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...
real 0m7.711s //it the problem
user 0m0.091s
sys 0m0.476s
4b9b3361

Ответ 1

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

Отключив его, время script в вопросе возвращается к:

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Решения:

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

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

127.0.0.1 localhost cygdrive wpad

Ответ 5

Вызов bash из оболочки script не может быть быстрым. Быстро ли использовать

while true; echo hello; done

?

Ответ 6

Положим на него некоторые числа. Я запустил следующее:

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

Я думаю, что это в значительной степени отвечает на ваш вопрос. Проблема в том, что вы просматриваете окно "cmd" Windows, которое по своей сути медленное. Cygwin сам по себе не проблема, это дисплей, который пытается удержать, что замедляет работу (для этого теста).

Ответ 7

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

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

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

echo Hello World
echo Good Bye

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

echo Hello World; \
echo Good Bye

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

Ответ 8

Я смог исправить эту проблему, удалив bash -комплекс и переключившись с Kaspersky на Windows Security Essentials. (Я диагностировал вмешательство Касперского с помощью Process Explorer при запуске теста "echo Hello".) Пришло мое тестовое время с 7 секунд до 0,2.

Ответ 9

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

Ответ 10

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

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

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

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