DLL programming에 대해서

sonagi2004의 이미지

<<정적이 아닌 동적으로 쓴이유는 꼭 main과 상관없이 죽더라도 main은 살려고 만든것입니다. debugging은 library만 main그래도 service할수 있었으면 합니다. main은 절대 죽으면 안됨 >>
unix c program에서 library를 동적라이브러리로 만들었어요

-dlopen. dlsys, dlclose를 사용하죠...

그런데 dll function에서 coredump가 나서 죽으면 main까지 죽는데

main은 죽지 않고 독립적으로 운영될수 있는 방법은 없나요?

참) solaris 8 입니다.

pynoos의 이미지

전에 외부 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해야 도리가 아닐까요? ^^

choissi의 이미지

pynoos wrote:

사실 문제가 있으면 core를 내고, 죽어야 정상이고, 그걸 debugging해야 도리가 아닐까요? ^^

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

체스맨의 이미지

공유 라이브러리에서 로드된 함수들은 그것을 로드한 프로세스의
주소 공간에서 실행되기 때문에, 그 함수들이 문제를 일으키면
그 프로세스도 죽습니다.

그것을 피하려면, 별도의 프로세스에서 함수를 실행시키고,
프로세스간 통신에 의해 데이터를 주고 받아야 합니다.

Orion Project : http://orionids.org

낙엽의 이미지

pynoos wrote:

사실 문제가 있으면 core를 내고, 죽어야 정상이고, 그걸 debugging해야 도리가 아닐까요? ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.