[질문]wait함수에서 ECHILD에러가 나는 이유?

익명 사용자의 이미지

chori님 일단 답변 감사드리고요

제가 리눅스랑 유닉스에서 비교해서 같은 소스를 돌려보니 좀 signal체계
가 다른거 같네요..

여튼 밑의 문제는 아직도 미해결 상태랍니다..-_-;;

이번에는 다른건데요 제목에서 처럼 wait함수가 ECHILD에러가 나는 경우

만일 pid 로 지정된 프로세스가 존재하지 않거나 호출 프로세스의 자식이
아닐 경우 이다

라고 man페이지에 나와 있는데 그럼 이것은 어떻게 해결을 해야하는건가
요?

물론 첫번째의 경우는 잘못된것이지만 호출 프로세스의 자식이 아닐경우
는 해결방법이 있나요?

익명 사용자의 이미지

호출 프로세스의 자식이 아닌데 SIGCHLD가 온다는것은..
다른 프로세스에서 현재 프로세스에게 시그널을 준다는 얘긴가여??
만약 이런식이라면..

SIGUSR같은 사용자 시그널을 날려보내서 핸들링하게 하면 되겠는데..
글쎄요 따른 프로세스에서 날라온 SIGCHLD라는 경우는 저도 어떤 경우에
발생하는지 모르겠네요. 그래서 정확히 답변을 드릴수 없겠네여 ^^*

즐프하세여..

익명 사용자의 이미지

매번 감사드려요..^^;

제가 자세히 질문을 적지를 못한거 같은데요

간단한 프로그램의 구조를 말씀드리자면 현재의 process1가 process2를

생성한후 그 process에게 exec명령어를 통해 실행을 시켜요

실행을 하다가 process2는 시그널을 통해 stop상태가 되고요

process1은 다시 process3를 생성한후에 KILL(process2,SIGCONT)를 합니
다.

kill명령어 다음줄에 wait(process2,&status,0)이런 명령어가 있고 여기
서 바로 ECHILD에러가 발생합니다.

제가 좀 고민을 해본 바로는 이때 wait하고 있는 process3는 process2의
부모 process가 아니기에 에러가 발생하는 것으로 생각되는데요..

이것을 해결할 방법을 모르겠네요...-_-;;

ps>아 그리고 APUE책을 보니 SIGCHLD는 SIGSTOP이 발생한 경우에도 발생한
다고 하네요..

익명 사용자의 이미지

궁금함 wrote..
매번 감사드려요..^^;

제가 자세히 질문을 적지를 못한거 같은데요

간단한 프로그램의 구조를 말씀드리자면 현재의 process1가 process2를

생성한후 그 process에게 exec명령어를 통해 실행을 시켜요

실행을 하다가 process2는 시그널을 통해 stop상태가 되고요

process1은 다시 process3를 생성한후에 KILL(process2,SIGCONT)를 합니
다.

kill명령어 다음줄에 wait(process2,&status,0)이런 명령어가 있고 여기
서 바로 ECHILD에러가 발생합니다.

제가 좀 고민을 해본 바로는 이때 wait하고 있는 process3는 process2 의
부모 process가 아니기에 에러가 발생하는 것으로 생각되는데요..

이것을 해결할 방법을 모르겠네요...-_-;;

ps>아 그리고 APUE책을 보니 SIGCHLD는 SIGSTOP이 발생한 경우에도 발생한
다고 하네요..

음 그렇다면여...
굳이 SIGSTOP과 SIGCONT를 사용하실필요 없이..

사용자 시그널을 사용하여
코드상으로 Stop을 시키고 Cont를 시키는 코드로 바꾸는게 나을거 같네여.

SIGSTOP이나 SIGCHLD는 ignore도 시키지 못하니..
재 생각에는 사용자 시그널을 넘겨주어 그 시그널 핸들러로
sleep을 시키거나 stop을 시켜 하는게 나을듯 생각이 듭니다.

그럼 즐프여 ^^*

익명 사용자의 이미지

;
;제가 좀 고민을 해본 바로는 이때 wait하고 있는 process3는 process2의
;부모 process가 아니기에 에러가 발생하는 것으로 생각되는데요..

;이것을 해결할 방법을 모르겠네요...-_-;;
;

답을 본인이 말한거 아니에요?
부모도 아니면서 왜 wait()를 하는겨... ㅋㅋㅋ

익명 사용자의 이미지

SIGSTOP과 SIGCONT는 잘만 돌아가는데
뭔 SIGUSR을 가지고
멈추었다가 돌아가는 코드를 또 짜라는 건지...
그렇게 하면 부모도 아니면서 waitpid()를 해도 된다는 말인가요?
ㅋㅋㅋ

도무지 문제의 본질을 파악을 못하면서 답을 쓰는구만유... ㅋㅋㅋ

익명 사용자의 이미지

내가 실력이 없어 그러니 그런줄 알지만..
이따위로 말하는 당신은 얼마나 잘났길레 이따위 대답을 하는건지 프하하
하..
당신 정말 잘나쏘..

댓글 달기

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