부모 프로세스가 2개일 수도 있나요???

inviolable의 이미지

책에 나와있는 내용으로는...

한 프로세스에서 system함수를 호출하고 system함수가 자식 프로세스를 생성했을 때, 자식 프로세스가 종료되면 system함수를 호출한 프로세스에게도 SIGCHLD 신호가 간다는데요... 이 부분이 이해가 안가네요...

bushi의 이미지

그 문장 어디에서 부모 프로세스가 2개라는 암시를 받으셨는지요 ?

inviolable의 이미지

말하자면 system함수에서 fork함수를 호출해서 생긴 자식 프로세스가 종료되면 system함수로도 시그 차일드 신호가 가고 system함수를 호출한 프로세스에게도 시그 차일드 신호가 간다는 건가요???

system함수가 생성한 자식 프로세스의 부모 프로세스 system함수를 호출한 프로세스가 된다면 system함수를 호출한 프로세스에게만 신호가 가는게 맞지 않나요?? 일개 함수(시스템 콜)에게도 신호가 가는 이유가 뭔가요??

익명 사용자의 이미지

system함수는 그냥 함수일뿐입니다. 당연히 system함수에게는 시그널이 전달되지 않습니다.

system함수를 호출한 부모 프로세스에게만 시그널이 보내지겠죠.

inviolable의 이미지

(류광 번역, 고급 유닉스 프로그래밍 제 2판 406p 하단) system함수가 실행 중인 상황에서는 SIGCHID 전달을 차단해야 한다. 실제로도 POSIX.1에 그렇게 명시되어 있다. 그렇게 하지 않으면, system이 생성한 자식 프로세스가 종료되었을 때 system을 호출한 프로세스가 자신의 자식들 중 하나가 종료된 것으로 오인하게 된다. 그 프로세스는 wait류 함수들 중 하나를 사용해서 그 자식 프로세스의 종지 상태를 수거할 것이며, 그러면 system함수가 그 자식 프로세스의 종지 상태(반환 값으로 쓰인다.)를 회수할 수 없게 된다.

system함수가 생성한 자식 프로세스의 종지 상태를 system함수가 회수해야하는 이유가 무엇인지 궁금합니다. 원래 종지 상태는 부모가 회수하는 것이 보통 아닌가요???

익명 사용자의 이미지

그 system 함수 호출한 프로세스가 부모 프로세스라니까요. 둘이 다른 게 아니예요.

A라는 프로세스가 자기 내부에서 system 함수를 부르면 1. fork/exec해서 자식 B를 실행시키고, 2. 다시 wait류 함수를 호출해서 B가 종료할 때까지 대기상태로 들어갈텐데, A에 SIGCHID 핸들러를 등록되어있는 상태였다면 B가 종료되어 SIGCHID가 전달되었을 때 1. A는 대기상태에서 깨어나서 2. 등록된 핸들러를 실행, 여기서 별도의 wait류 함수를 실행시켜 B의 종료값을 받아버리고 핸들러에서 리턴, 다시 대기상태로 들어가겠죠? 그 이후로 A는 system함수 내부에서 불린 wait 내부에서 계속 멍때리고 기다리는거예요

inviolable의 이미지

답변 감사합니다. 잘 이해되었습니다.

익명 사용자의 이미지

아마 대략적으로 fork, execl류의 함수를 호출하여 자식 프로세스를 생성 후, 특정 명령어를 수행시킨다음

wait함수를 호출하여 자식프로세스가 종료되기를 기다린 후 리턴하는 형태로 구현되어 있을겁니다.

그런데 만약 system 함수를 호출하기전에 wait 함수를 호출하는 SIGCHLD 핸들러를 등록하고나서 system 함수를

호출하게 된다면, system이 생성한 자식 프로세스가 종료되는 순간 SIGCHLD 시그널이 부모 프로세스에게 전달되고

SIGCHLD 핸들러가 호출되겠죠. 그렇게되면 이 핸들러에서 wait함수가 호출되어 자식 프로세스의 종료상태가 회수

되고, 결국 system 함수 내부에서 호출된 wait은 리턴되지 못하겠죠.

아마 제 생각에는 책의 내용이 이런 문제점에 대해서 말하고 있는 것 같습니다.

그리고 system 함수 내부에서 자식 프로세스의 종료상태를 회수하는 이유는, 아마도 그렇게 하지않으면 결국

사용자가 직접 wait을 호출해야 하는데, 낌빡하고 wait을 호출하지 않을경우 좀비 프로세스가 되어버리기 때문에

이를 방지하기 위해서도 system 함수 내부에서 회수하는 것 같습니다.

inviolable의 이미지

많은 도움 되었습니다.

IsExist의 이미지

system 함수는 shell 을 통해서 실행됩니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

댓글 달기

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