我意識到還有一些關於爲什麼Cygwin顯然很慢的問題,但這種情況似乎是獨一無二的。Cygwin的bash在出現錯誤後變得非常緩慢
我有一些問題報告了很多錯誤,然後在重新啓動後,從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
更新: 我剛剛意識到在當時和現在之間安裝的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
的.inf文件它是否必須來自'bash'?如果您從資源管理器運行ls.exe,會發生什麼? (不知道這是可能的...) – Thomas
你也可以嘗試使用'strace'來判斷系統調用是否緩慢。 – Thomas
@Thomas - 我不熟悉'strace',輸出有點羅嗦。我在這裏找什麼? –