pause()와 exit()에서의 의문.

sfect의 이미지

프로그래밍을 공부하는 학생으로써 몇가지 질문올립니다.

먼저 exit(),
프로그램에서 라인이 끝나서 종료될경우 굳이 exit()를 쓰지 않아도 정상종료가 되던데,
return이나 exit()없이 정상 종료되는것(리턴형이 void가 아님에도,)은
함수가 끝나면 자동으로 exit()처리를 해주어서입니까? 아니면 그냥 에러가 뜨지 않는것입니까?

두번째, pause()에 대해서인데요.

    if((pid = fork()) == 0){
        ppid=getppid();
        while(1){
            pause();
            kill(ppid, SIGUSR1);    
        }
        exit(0);
    }else{
        while(1){
            kill(pid, SIGALRM);
            pause();
        }
        exit(0);
    }

이렇게 하여 자식과 부모가 대기상대에 있다가 시그널로써 깨어났다가 상대방에게 시그널을 보내고
대기하는, 무한으로 반복되는 형식으로 짰습니다.

또 SIGUSR1을 부모가 받으면 받았다는 메세지를 띄우고,
SIGCHLD로써 자식 프로세스가 종료되는 시점을 알리도록 함수를 설정해놓았습니다.

그런데 이렇게하고 실행하면
child fork()후
child : pause() 실행, child 대기상태
parent : send signal_USR1 to child
parent : pause()
signal : SIGCHLD 이 시점에서 child 종료
parent : send signal_USR1 to child
parent : pause()
이러고 무한대기 ...

이런형식으로 돌아갑니다.
parent의 신호로 child가 깨어나질 않고 그냥 pause()에서 종료 해버립니다.
그리고 parent는 child가 종료되었다는 신호를 받고 한번더 루프를 돌고 대기상태에 들어갑니다.
당연히 child가 없으니 더 이상의 signal은 발생하지 않고, parent는 무한히 기다리는데요.

위 코드에서 child가 pause()에서 깨어 났을때 다음 문장이 아닌, 종료되는 이유는 무엇입니까?
여러 예제들의 문장이야 pause()에서 깨어나 다음문장으로 잘만 가던데, 이건 뭐.. 이유를 모르겠습니다.

익명 사용자의 이미지

SIGALRM, SIGUSR1 시그널의
헨들러가 없다면 디폴트 액션은 프로세스 죽는것 입니다.

sfect의 이미지

다른 모든건 있고, 단지 pause()가 빠지면 마구 섞이지만 이해가 될정도로는 돌아갑니다.
pause()를 넣으면 child를 불리는 시점에서 죽여버리네요;

댓글 달기

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