[질문] fork() 를 왜 이렇게 쓰는 걸까요?

redpig의 이미지

소스를 분석하다가 도저히 이해가 가지 않는게 있어서 질문 드립니다.

main() 함수에서 StartDaemon() 함수를 호출하는데
StartDaemon() 함수는 다음과 같습니다.

void StartDaemon()
{
   int pid;
 
   if(setpgrp() == -1)
      exit(-1);
 
   if((pid=fork())<0)
      exit(-1);
   else if(pid>0)
      exit(0);
}

함수명으로 봐선 프로세스를 데몬모드로 실행하는것 같은데 위 함수는 그냥 child 프로세스를 생성하고 자신은 죽는거 아닌가요?
이게 데몬이랑 무슨 상관이 있는걸까요?

SoulreaveR의 이미지

부모가 init이 되겠죠

klutzy의 이미지

parent가 child를 만들고 사라진 후, child가 홀로 남아 daemon으로 각성하게 됩니다.

데몬을 돌릴 때 많이 사용하는 방식으로, fork off and die라고도 부릅니다. http://wiki.linuxquestions.org/wiki/Fork_off_and_die daemon이라는 게 그리 거창한 게 아니라 다른 프로세스의 간섭을 받지 않고 뒤에서 조용히 돌아가는 프로그램이기 때문에 이런 식의 구조를 많이 사용해요.
쉘에서 실행하는 경우 그 행동이 더 명확해지는데, 쉘에서 프로그램을 실행하면 쉘은 그 프로그램이 끝날 때까지 기다리게 되는데, 여기에서 parent가 child를 만들고 종료하면 child는 계속 작동하지만 parent가 종료했기 때문에, 쉘은 다시 입력 모드로 돌아오게 됩니다.

redpig의 이미지

Quote:

쉘에서 실행하는 경우 그 행동이 더 명확해지는데, 쉘에서 프로그램을 실행하면 쉘은 그 프로그램이 끝날 때까지 기다리게 되는데, 여기에서 parent가 child를 만들고 종료하면 child는 계속 작동하지만 parent가 종료했기 때문에, 쉘은 다시 입력 모드로 돌아오게 됩니다.

아하~바로 이 목적인거 같네요.
답변 감사합니다.

terzeron의 이미지

daemon mode로 동작하게 하는 거라면, BSD에서 POSIX로 도입된 daemon() 함수를 쓰면 됩니다.

mach의 이미지

http://kldp.org/node/52335
예전의 글들을 잘 읽어 보면 도움이 되는 경우가 많이 있겠습니다.

검색어: setsid 가 좋겠습니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

wsid의 이미지

fork 함수를 써 본적은 있지만, 이런 방식으로도 쓸 수 있는 것을 오늘 알았습니다. ^^

댓글 달기

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