NMS관련질문입니다...그중에서 fork()에 관한 문제...

sun1226의 이미지

먼저코드를 보시면.....

int main (int argc, char *argv[])
{
    int pid;
    int i_pid[5];
    ping();
    printf("main pid : %d\n", getpid());

    if((pid=fork())==0) {
        sleep(10);
        while(1){
            snmp();
            analysis();
            printf("snmp pid : %d\n", getpid());
            sleep(30);
        }
    }

 
    if((pid=fork())==0){
        sleep(30);
        while(1){
            printf("auto pid : %d\n", getpid());
            auto_ui();
        }
    }
}

이렇게 main모듈이 있습니다....문제는요..

첫번째fork()에서
snmp();함수에서 필요한 linked list를 초기화하고 삽입해서 여러가지정보를
linked list를 만들구요...
이 linked list를 두번째 fork()의 auto_ui()에서 사용을 할려고하는데
linked list head정보를 읽어오질 못하더라구요..
참고로 engine.h라는 해더파일에 구조체와 head정보와 함수프로토타입이 선언되어
있구요...
두번째 fork()안에서 이런 header정보를 공유할 수없는건지...
결정적으로 auto_ui()라는 함수를 첫번째 fork()의 snmp()뒤에
있으면 정상적으로 돌아가더라구요....

무슨 문제일까요????

cjy1126의 이미지

같이 프로젝트 하는 사람입니다.(저는 UI :D )

main 모듈에 linked list가 있습니다.

main에서 포크를 하면, 자식도 main의 변수를 쓸 수 있습니다.

그런데, linked list *head 구조체의 멤버인 next가 가르키는것은 주소인데, 이걸 사용가능한지요?

next가 가르키는 주소가 프로세스가 뜨면서 할당받은 주소를 가르키니까... fork로 생성된 자식은 다른 프로세스니까 사용할 수 없는건가요?

지금 main을 fork한 후 자식에서 head->next를 하면 계속 다운이 됩니다.

머지 작업중 다른 실수인지? 아니면, 원래 linked list는 fork로 사용할 수 없는지요?

하나씩 다 구현은 했는데... 합치는게 더 힘든것같네요.

답변 부탁드리고, 좋은 하루 되세요. :)

용가리의 이미지

혹시 head에 malloc() 으로 메모리 할당 하셨는지요...
그리고 fork()는 프로세스의 메모리 내용을 그대로 복사하기
때문에, 님께서 힙 영역을 부모에서 할당 했다면 동일한게
자식에게도 복사됩니다. 따라서 연결리스트는 fork() 하면
자식에서 못사용하는 그런건 없습니다.
연결리스트에서 사용하는 각 노드에 메모리 할당을 제대로
하고 다음 노드를 가리키는 next 멤버를 사용하는지
확인하십시오. node에 메모리 할당도 안하고 노드의
멤버 변수인 next에 접근하려고 하면 segment fault가
나니까요.....
다시 한번 확인 해보십시오.
그럼 2만.....

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.