변경에 이상한 부작용이 있습니다. LD_LIBRARY_PATH
.LD_LIBRARY_PATH 부작용
라이브러리가 포함 된 경로를 추가 할 때 (예 : :
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib
그러면 모든 것이 믿을 수 없을 정도로 느려집니다. 예를 들어, 간단한 ls
은 10 초 길이가 될 수 있습니다.
ldd
출력은 동일 전과 LD_LIBRARY_PATH
변경 후 정확히 내가 strace
와 느린 ls
의 실행을 디버깅하려고 : 나는 두 경우 모두 동일한 실행을 얻을. ls
실행 중에는 실행이 멈추지 않습니다 (strace
는 10 초 지연 중에 아무 것도 출력하지 않고 갑자기 ls
을 실행하기 때문에). 그래서 내 껍질에서 올 수 있다고 생각했지만, 이것은 동일합니다. 내 bash에서 strace
을 실행하고 두 경우 모두 ls
을 실행하면 strace
출력이 나타납니다. 쉘은 ls
을 실행하고 실행이 끝날 때까지 기다립니다 (마지막 strace
). 지연 strace
전에 출력은 waitpid(...)
입니다. 그래서 나는 커널 레벨의 이슈 인 것처럼 ls
의 실행과 실행 사이에 뭔가 잘못되었다고 생각합니다. (0CPU 사용)에 sleep
을 만든 경우와 같이 작동합니다. 지연 동안
참고 완벽하게 정상, 그래서에서 ls
을 방해하지 않습니다 내 예.
그래서 나는 LD_LIBRARY_PATH
부작용이나 내 예제를 깊이 디버깅하는 방법에 대해 자세히 설명하는 데 흥미 롭습니다.
좋은 질문입니다. 나는'LD_LIBRARY_PATH'를 사용했고 그런 행동을 한 번도 본 적이 없지만, 당신의 관찰은 고립되고 명백한 것처럼 보입니다. 흥미 롭 군. – thb
'export LD_DEBUG = all'과'man 8 ld.so' –
이 명백하게 드러나지 만 ldd가 LD_LIBRARY_PATH에서 무엇인가를 사용한다면 "ldd $ (which ls)"는 단서를 줄 수 있습니다. – Matthias