Проблема с зависанием Windows 10 и Cygwin

Проблема с зависанием Windows 10 и Cygwin

Когда я запускаю интерактивную программу (например, mysql) из cygwin на Windows 10, ввод просто зависает и ничего не делает. Если я нажимаю ctrl-c out, я вижу, что ввод отправляется на консоль.

Я также наблюдаю странные результаты в других интерактивных программах (pry, irb) — на Windows 7 все работало нормально.

Кто-нибудь видел это и решил?

решение1

Если strace выдает ошибку сегментации, наиболее вероятной причиной является антивирус.

Последним, вызывающим эту проблему, является Micro Trend.

https://cygwin.com/ml/cygwin/2016-08/msg00092.html

За последний месяц было зарегистрировано несколько случаев этого заболевания.

решение2

В среде cygwin доступна команда linux «strace». strace выводит все взаимодействия ОС <--> приложения (в данном случае приложение <--> cygwin <--> ОС), и конкретный системный вызов или другая операция, на которой она зависла, должны быть очевидны.

Чтобы использовать strace, просто добавьте команду strace перед командой, которая запускает приложение, которое вы хотите отладить. Например, если вы запускаете mysql из терминала cygwin с помощью команды mysql, вместо этого вызовите ее как strace mysql.

Если вывод от запуска strace для зависающих программ неочевиден, пожалуйста, опубликуйте вывод на pastebin или эквивалент (не пытайтесь дополнять свой ответ, это будет огромный объем текста).

Следующим шагом будет запуск с помощью отладчика, например gdb, но в таком случае обычно достаточно strace.

Обновлять

По-видимому, в порте cygwin strace за последние пару месяцев появился баг; согласно поиску в Google 'cygwin strace seg fault'; я не знал об этом. Поскольку strace — лучший инструмент для этой работы, попробуйте обновить установку cygwin, чтобы увидеть, было ли исправление преднамеренно или непреднамеренно внесено. Чтобы обновить установку cygwin, используйте следующую последовательность команд:

wget -NP /usr/local/bin/ http://cygwin.com/setup-x86_64.exe
chmod u+x /usr/local/bin/setup-x86_64.exe
/usr/local/bin/setup-x86_64.exe -n

Источник

После обновления попробуйте еще раз. Если все еще возникают ошибки сегментации, все становится немного сложнее, поскольку gdb гораздо сложнее в использовании, а реальных эквивалентов strace в среде cygwin, насколько мне известно, нет.

Всегда есть вероятность, что обновление решит ваши проблемы с запуском, и strace станет спорным вопросом (вероятность не очень велика...)

Обновление 2

Если команда cygwin strace выдает ошибку сегментации после обновления, я думаю, что лучше всего использовать собственный отладчик пользовательского пространства Windows, такой как logger.exe. Информацию по установке можно найтиздесь.

logger.exe используется аналогично strace, проблема в том, что теперь у вас будут трансляции cygwins системных вызовов программ, а не сами системные вызовы. Другими словами, он будет рассматривать только взаимодействие ОС с cygwin, и специфика нарушающей программы может быть скрыта. Однако зависание или заморозка почти всегда могут быть отнесены либо к ограничению ресурсов, либо к неотвечающему системному вызову, и этот метод выявит это.

Поскольку я предлагаю это как альтернативу чему-то (strace), что может работать и после обновления, я не буду вдаваться в подробности его конкретного использования. В основном, что вы будете делать (после установки), это вызывать cygwin из командной строки Windows, предваряя ее программой logger.exe, как я описал strace. Затем откроется интерактивный терминал cygwin, и вам нужно будет запустить программу, которую вы оцениваете из него. Приложение logger (должно) вывести огромный объем текста, описывающего, что делают cygwin и его дочерний процесс "ваша программа". Когда происходит зависание, должен быть очевиден конкретный системный вызов или ресурс, на котором ожидается. Опять же, если это не так, опубликуйте полный текст вывода logger.

Связанный контент