2012-09-09 2 views
3

프로세스 X가 있고 그 다음 일부 공유 라이브러리 Y가 주소 공간에로드되었다고 가정합니다. 그런 다음이 라이브러리 Y를 다른 버전 인 Yprime으로 바꾼다면 프로세스에 어떤 영향을 미칠 수 있습니까?런타임에 링크 된 공유 라이브러리를 스왑 아웃

+2

런타임에 라이브러리를 수동으로로드합니까, 아니면 링크가로드되어있는 로더입니까? http://www.kernel.org/doc/man-pages/online/pages/man3/dlsym.3.html –

+0

두 번째 옵션. – earlence

+0

내 대답 http://stackoverflow.com/a/12322672/841108이 부분적으로 귀하의 질문과 관련이있을 수 있습니다. –

답변

0

효과 없음. 로더는 프로세스가 끝날 때까지 (또는 라이브러리가 dlclose(3)을 통해 언로드 될 때까지) 라이브러리를 열린 상태로 유지합니다. 즉, 블록이 디스크에 남아 있기 때문에 동일한 (지금 삭제 된) 라이브러리를 계속 사용합니다.

+0

라이브러리 파일을 현재 위치에서 덮어 쓰면 어떻게 될까요? – lanzz

+1

@lanzz : 그러면 정의되지 않은 동작이 발생합니다. –

+0

그럴 수 있습니까? 라이브러리가 메모리에로드되면 원래의 디스크 블록을 다시 읽을 이유가 없습니다. 또는 라이브러리 파일을 대신 직접 매핑합니까? – boycy

관련 문제