[완료] fork를 통해 생성 된 자식 프로세스 제거 시 의문점??

cjynim의 이미지

안녕하세요 .. 리눅스 소켓 프로그래밍을 공부하던 중 .. fork함수를 통해 자식 프로세스를 생성 했을

경우 자식 프로세스가 종료가 되면 리턴 값이 커널에게 전달 되게 되고 커널이 리턴 값을 부모 프로세스

에게 전달하기 전까지 자식 프로세스를 소멸시키지 않는다고 합니다. 그래서 부모 프로세스에서는 wait

함수 또는 waitpid함수를 통해서 이미 종료 된 자식 프로세스의 리턴 값을 커널에게 달라고 요구하고

커널은 종료 된 자식 프로세스의 리턴 값을 부모 프로세스에게 전달하여 자식 프로세스를 소멸하게 된다

고 합니다. 그런데 여기서 의문점이 생겼습니다. 만약 부모 프로세스가 먼저 종료 되고 그 후에

자식 프로세스가 종료 되어 버린다면 커널은 리턴값을 전달 할 부모 프로세스가 이미 종료 되어 버렸기

때문에 리턴값을 전달 할 수 없게 되고 자식 프로세스는 좀비로 남게 되어 버리는거 아닌가요?? 이 문제를

해결하기 위해서 자식 프로세스가 먼저 종료 되기 전에 부모가 종료 되지 않도록 wait함수나 waitpid함수

부분을 루프를 돌려버리면 될 것 같지만 책에서 이 방법은 비 효율적이어서 시그널 핸들링을 사용한다고 했

는데요 .. 시그널 핸들링의 경우도 마찬가지로 부모 프로세스가 먼저 종료 되어 버린다면 시그널 핸들링

을 할 수 없기 때문에 자식 프로세스는 좀비 프로세스로 남는것 아닌가요??

이 부분이 잘 이해가 가지 않아서 책을 여러번 읽어 봤는데요.. 도무지 이해가 가지 않습니다. 좀 도와

주세요 ~ ㅡㅡ;;

Necromancer의 이미지

부모프로세스가 종료되면 자식프로세스의 부모는 INIT프로세스 (pid=1)로 바뀝니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

cjynim의 이미지

그럼요 자식프로세스의 부모프로세스가 INIT프로세스로 변환 된다면 INIT프로세스에서 자식프로세스의

종료를 담당하잖아요... 그럼 원칙적으로 자식프로세스를 생성한 부모프로세스에서 자식프로세스를 제거

해주는게 좋지만 여의치 않다면 운영체제 차원에서 자식프로세스를 제거해 준다고 이해해도 되나요??

Necromancer의 이미지

INIT이 부모역할 다 해주죠.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

cjynim의 이미지

답글 정말 감사합니다. 공부에 많은 도움이 되었습니다 ~

댓글 달기

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