
이것은 내 콘텐츠입니다 ~/.zshenv
( /etc/zshenv
공백)
print -P "before %D{%H:%M:%S}"
/usr/bin/time /bin/cat /dev/null
print -P "after %D{%H:%M:%S}"
을 시작하려고 하면 zsh
때때로 cat
최대 30초 동안 명령 실행이 중단됩니다.
bash$ zsh -c exit
before 16:04:08
0.00s user 0.00s system 0% cpu 0.001 total
after 16:04:29
그런 다음 즉시 다른 새 zsh를 열면 정지가 발생하지 않습니다. 처음에 최소 2분 정도 기다리면 이런 일이 거의 항상 발생합니다.
왜 이런 일이 발생합니까? 어떻게 막을 수 있나요?
zsh-4.3.11
CentOS 6.9에 있습니다 .
답변1
속도가 느려지는 이유는 hash
로컬 SA가 내 경로에 배치하는 기본 디렉터리 중 하나에 8,000개가 넘는 항목이 포함되어 있기 때문입니다.
사용strace
Stéphane Chazelas가 제안한 명령stat()
사용된 통화 로 hash
인해 속도가 느려지는 것으로 밝혀졌습니다 .
그 직후에 다른 셸을 열면 각 stat()
호출이 180배 더 빨라집니다(아마도 캐싱으로 인해). 이는 각 호출에 속도 저하가 없는 이유를 설명합니다.
수정 사항으로 내 PATH
.PATH