Me doy cuenta de que hay algunas otras preguntas sobre por qué aparentemente Cygwin es lento, pero este caso parece ser único.El bash de Cygwin se volvió extremadamente lento después de los errores
Tuve algunos problemas donde las cosas reportaban muchos errores, y luego de un reinicio, cualquier proceso lanzado desde bash es extremadamente lento. Honestamente, no tengo idea de qué podría estar causando esto (verifiqué la prioridad del proceso en taskmgr, sigue siendo normal).
Detalles:
que estaba ejecutando un periodo de prueba de un cierto código toma durante la noche y regresaron en la mañana para encontrar mi pantalla inundado de errores (cajas de diálogo - en su mayoría intentaron acceder punteros NULL), así como bastante algunas cosas enviadas a la línea de comando. Había bastante texto que no pude capturar (la mayoría de las veces la computadora no respondía, tuve que reiniciarlo manualmente). Recuerdo algo del texto al que se hace referencia "Win32 error 6" (que supongo que significa INVALID HANDLE).
Después del reinicio, la mayoría de las cosas están bien, pero Cygwin/bash sigue siendo bastante insensible. Me encontré con la siguiente, como se sugiere en otra pregunta:
$ time for i in {1..10} ; do bash -c "echo Hello" ; done
...
real 1m12.244s
user 0m3.522s
sys 0m34.460s
La invocación de otra instancia de bash no es necesario que la terrible velocidad:
$ 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
A pesar de las órdenes internas no parecen ir lo suficientemente rápido:
$ time for i in {1..10} ; do echo Hello ; done
....
real 0m0.001s
user 0m0.000s
sys 0m0.000s
Actualización: Acabo de darme cuenta de una actualización de Windows instalada entre entonces y ahora también. Me alegra que esto no se esté complicando ni nada. (Aunque, creo que otros compañeros de trabajo han instalado la actualización y no están viendo problemas).
Actualización 2:
Para responder un comentario a continuación, los archivos en/bin ejecutar sin ningún problema de CMD. Además, eliminé completamente y volví a descargar mi directorio de instalación cygwin y el problema todavía está ocurriendo.
No estoy [todavía] completamente seguro de cómo usar Cygwin's strace, pero creo que la primera columna puede ser delta de tiempo. Con esto en mente, aquí hay unas líneas que parecen problemáticos (la 0xDEADBEEF
ciertamente no es alentador):
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
¿Tiene que ser de 'bash'? ¿Qué sucede si ejecuta 'ls.exe' desde Explorer? (No sé si eso es posible ...) – Thomas
También podría intentar usar 'strace' para averiguar si es una llamada al sistema lenta. – Thomas
@Thomas - No estoy familiarizado con 'strace' y la salida es un poco prolijo. ¿Qué estoy buscando aquí? –