DLL programming에 대해서
글쓴이: sonagi2004 / 작성시간: 화, 2003/03/04 - 9:13오전
<<정적이 아닌 동적으로 쓴이유는 꼭 main과 상관없이 죽더라도 main은 살려고 만든것입니다. debugging은 library만 main그래도 service할수 있었으면 합니다. main은 절대 죽으면 안됨 >>
unix c program에서 library를 동적라이브러리로 만들었어요
-dlopen. dlsys, dlclose를 사용하죠...
그런데 dll function에서 coredump가 나서 죽으면 main까지 죽는데
main은 죽지 않고 독립적으로 운영될수 있는 방법은 없나요?
참) solaris 8 입니다.
Forums:
전에 외부 so을 사용하다가 SIGCHLD 문제 때문에 생긴것을 해결하다
전에 외부 so을 사용하다가 SIGCHLD 문제 때문에 생긴것을 해결하다가 얻은 경험입니다만,
그녀석이 내부적으로 안전하게 구현하려고 그랬는지,
library에 들어가서는 곧 vfork를 하더군요. 그때 생기는 child가 실제 모든일을 다하고.. _exit(0) 로 종료하는 것이고, 부모는 wait 하고 있다가 process를 접수하죠.
vfork 는 child가 모 process의 address 공간을 그대로 사용하기 때문에,
child가 이용한 모든것이 그대로 변경이 됩니다.
waitpid 로 기다린 후, WIFEXITED 값이 0 인지(정상) 확인하면 됩니다.
제가 겪었던 문제는 난데 없이 제가 fork를 하지 않았는데 child가 죽었다고 나오는 제가 등록한 SIGCHLD signal handler였지요.
vfork 들어 가기전에 sigaction을 통해 handler를 대피시켜놓고, wait이후에 복원하시면 됩니다.
저도 다른 라이브러리가 사용하는 것은 봤어도, 실전에 써본적이 없어서, test만 하고 써볼날을 기다리고 있습니다.. (테스트는 잘되었습니다 ^^)
문제가 있으시면 답장주세요.
사실 문제가 있으면 core를 내고, 죽어야 정상이고, 그걸 debugging해야 도리가 아닐까요? ^^
---
http://coolengineer.com
찬성 한표~!!
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
Re: DLL programming에 대해서
공유 라이브러리에서 로드된 함수들은 그것을 로드한 프로세스의
주소 공간에서 실행되기 때문에, 그 함수들이 문제를 일으키면
그 프로세스도 죽습니다.
그것을 피하려면, 별도의 프로세스에서 함수를 실행시키고,
프로세스간 통신에 의해 데이터를 주고 받아야 합니다.
Orion Project : http://orionids.org
찬성 두표!! ^^
댓글 달기