2016-12-12 4 views
0

이라고 불렀습니다. 그래서 공유 라이브러리에 대해 공부하고 있었고 암시 적으로 dlclose()이 프로세스 종료시 수행된다는 내용을 읽었습니다. 누가이 통화에 책임이 있는지 알고 싶습니다.dlclose는 암시 적으로

#include <stdio.h> 

int main() { 
     printf("Hello World\n"); 
     return 0; 
} 

을 내가 ldd ./a.out을했다면 그 다음 나는 이러한 라이브러리의 목록을 얻을 : 예를 들어, 내가 쓴

linux-vdso.so.1 => (0x00007ffd6675c000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2569866000) 
/lib64/ld-linux-x86-64.so.2 (0x0000562b69162000) 

링커는 이러한 권리를로드 할 책임이있다, 그래서 종결시의 책임이있는 사람 이 ./a.out이 라이브러리의 암시 적 dlclose()에 대해 실행 가능합니까?

+0

이것은 실수 여야합니다. 프로세스 종료시'dlclose'가 호출되지 않습니다. –

+0

정말입니까? Michael Kerrisk의 The Linux Programming Interface는 시스템 프로그래밍에 관한 책으로 잘 알려져 있기 때문에 책에 '모든 라이브러리의 암시적인 dlclose()가 프로세스 종료시 수행됩니다.'라고 명시되어 있습니다. –

+0

프로세스가 종료되면 , 열려있는 모든 파일 핸들이 자동으로 닫힙니다. DL은 단지 열린 파일이기 때문에 이것도 닫힌다는 것을 의미합니다. – Barmar

답변

2

exit()으로 전화를 걸거나 main()에서 돌아 오는 중 정상적인 프로세스 종료에 대해서만 이야기하고 있다고 생각됩니다. dlopen()은 아마도 동적 라이브러리의 모든 종료 기능을 실행하는 atexit() 처리기를 등록합니다.

프로세스가 비정상적으로 종료되면 라이브러리에서 코드를 실행할 수 없습니다. 프로세스가 정상적으로 종료하는 대신 OS에 의해 종료되면 OS는 파일 핸들을 해제하지만 프로세스의 컨텍스트에서 코드를 실행하지 않습니다.

2

나는 Kerrisk의 책을 가지고 있지 않지만, 당신이 그 내용을 정확히 특징 지우는 경우에는 조금 단순 해 보입니다. 프로세스가 종료 될 때마다 함수 dlclose()이 열린 공유 라이브러리에 대해 호출되지만, 프로세스가 종료 될 때마다 열린 공유 라이브러리에있는 모든 핸들이 닫히지 않는다고 말하는 것이 합리적입니다. 결과적으로 운영 체제는 하나의 프로세스가 해당 공유 라이브러리를 각각 참조하고, 공유 라이브러리의 참조 횟수를 0으로 설정하면 OS가 메모리에서 해당 참조를 언로드하도록 선택할 수 있음을 인식합니다.

dlclose() 그 이상의 효과가 있습니다. 특히 라이브러리에서 소멸자 함수를 실행하게합니다. 이러한 함수는 main()에서 돌아 오거나 exit()을 호출하여 프로세스가 정상적으로 종료 될 때 실행되지만 프로세스가 _exit()을 호출하거나 신호를 수신 한 것과 같은 다른 방법으로 종료되는 경우에는 실행되지 않습니다. 정상 종료의 경우, 순수 효과는 각각의 공개 공유 라이브러리에 대해 dlclose()이 호출 된 것과 같을 수 있지만 실제로는 dlclose()을 호출하여 반드시 달성 할 필요는 없습니다.

마지막으로, dl*() 함수가 POSIX로 정의되었지만 실질적으로 동적/공유 라이브러리의 모든 세부 사항은 구현의 재량에 맡겨져 있음을 알고 있어야합니다. 리눅스 책에 대해 물어 보았 기 때문에 리눅스에 관한 몇 가지 세부 사항을 언급했다.

+0

'dlclose()'에 대한 본격적인 호출 대신 Kerrisk이 의미하는 바는 해당 라이브러리에 대한 열린 카운트 참조가 감소된다는 것입니다. –

+0

@AbhinavJain, 나의 대답은 이미 내가 Kerrisk의 의도에 대해 말해야 할 모든 것을 담고있다 : 나는 잘못된 정보를 제공하는 것보다 그가 단순화하고 있었다고 생각하고있다. 그러나 책을 직접 읽지 않아도 내가 할 수있는 모든 행동은 내가 한 것처럼 관련 행동을 기술하고 책과 함께 자신과 조정할 수 있습니다. –

관련 문제