Я понимаю, что есть еще несколько вопросов о том, почему Cygwin, по-видимому, медленный, но этот случай кажется уникальным.
У меня были некоторые проблемы, когда в сообщениях сообщалось множество ошибок, а затем после перезагрузки любой процесс, запущенный из bash, был чрезвычайно медленным. Я честно понятия не имею, что может быть причиной этого (я проверил приоритет процесса в taskmgr, он все еще нормальный).
Детали:
Я запускал тест на замораживание какого-либо кода сокета в одночасье и вернулся утром, чтобы обнаружить, что мой экран залит ошибками (DialogBoxes - в основном пытались получить доступ к указателям NULL), а также довольно много вещей, отправленных в командную строку. Было довольно много текста, который я не смог захватить (компьютер был в основном не отвечает, я должен был перезагрузить его вручную). Я действительно помню часть текста, на который ссылается "Win32 error 6" (который я предполагаю INVALID HANDLE).
После перезагрузки большинство вещей прекрасны, но Cygwin/ bash по-прежнему остается невосприимчивым. Я запустил следующее, как было предложено в другом вопросе:
$ time for i in {1..10} ; do bash -c "echo Hello" ; done
...
real 1m12.244s
user 0m3.522s
sys 0m34.460s
Вызов другого экземпляра bash не нужен для ужасной скорости:
$ time for i in {1..10}; do ls ; done
# nb there are about 6 entries in pwd
....
real 0m47.718s
user 0m2.568s
sys 0m23.411s
Хотя встроенные функции выглядят довольно быстро:
$ time for i in {1..10} ; do echo Hello ; done
....
real 0m0.001s
user 0m0.000s
sys 0m0.000s
Update: Я только что понял, что Windows Update установлен и тогда, и сейчас. Я рад, что это не слишком сложно или что-то еще. (Хотя, я считаю, что другие сотрудники установили обновление и не видят проблем).
Обновление 2:
Чтобы ответить на комментарий ниже, файлы в /bin выполняются без каких-либо проблем с CMD. Кроме того, я полностью удалил и повторно загрузил каталог установки cygwin, и проблема все еще происходит.
Я все еще не совсем уверен, как использовать Cygwin strace, но я думаю, что первая колонка может быть временной дельта. Имея это в виду, здесь несколько строк, которые выглядят проблематичными (0xDEADBEEF
, безусловно, не обнадеживает):
4100175 4101564 [main] bash 5664 _cygtls::remove: wait 0xFFFFFFFF
4278898 4279724 [main] bash 5612 child_copy: dll bss - hp 0x628 low 0x611DC000, high 0x612108D0, res 1
2210923 25635973 [proc_waiter] bash 5664 pinfo::maybe_set_exit_code_from_windows: pid 5400, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000
3595425 16085618 [proc_waiter] bash 5612 pinfo::maybe_set_exit_code_from_windows: pid 5376, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000
3057452 19149209 [proc_waiter] bash 5664 pinfo::maybe_set_exit_code_from_windows: pid 5612, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000
2631997 38835042 [proc_waiter] bash 5716 pinfo::maybe_set_exit_code_from_windows: pid 5720, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000
2610852 38836658 [main] bash 4624 _cygtls::remove: wait 0xFFFFFFFF
3708283 42556365 [proc_waiter] bash 5716 pinfo::maybe_set_exit_code_from_windows: pid 4624, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000
3666884 42562053 [main] bash 5664 fhandler_base_overlapped::wait_overlapped: GetOverLappedResult failed, bytes 0
2742397 45305871 [proc_waiter] bash 5664 pinfo::maybe_set_exit_code_from_windows: pid 5716, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000
45322195 45322997 [main] bash 3996 child_copy: dll bss - hp 0x62C low 0x611DC000, high 0x612108D0, res 1
4247577 49581019 [main] bash 3996 _cygtls::remove: wait 0xFFFFFFFF
4266690 49581325 [main] bash 5664 child_info::sync: pid 3996, WFMO returned 0, res 1
49622099 49623318 [main] bash 4840 child_copy: dll bss - hp 0x690 low 0x611DC000, high 0x612108D0, res 1
4225718 53860809 [main] bash 4840 _cygtls::remove: wait 0xFFFFFFFF
4248491 53861119 [main] bash 3996 child_info::sync: pid 4840, WFMO returned 0, res 1
2167422 2169463 [main] bash 1412 _cygtls::remove: wait 0xFFFFFFFF
10369 2205831 [main] bash 1412 pwdgrp::load: \etc\passwd curr_lines 4082
10313 2237148 [main] bash 1412 cygwin_gethostname: name A119894
14720 2251868 [main] bash 1412 stat64: entering