[질문] fork() 를 왜 이렇게 쓰는 걸까요?
글쓴이: redpig / 작성시간: 목, 2009/08/20 - 5:36오후
소스를 분석하다가 도저히 이해가 가지 않는게 있어서 질문 드립니다.
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 프로세스를 생성하고 자신은 죽는거 아닌가요?
이게 데몬이랑 무슨 상관이 있는걸까요?
Forums:
부모가 init이 되겠죠
부모가 init이 되겠죠
_
parent가 child를 만들고 사라진 후, child가 홀로 남아 daemon으로 각성하게 됩니다.
데몬을 돌릴 때 많이 사용하는 방식으로, fork off and die라고도 부릅니다. http://wiki.linuxquestions.org/wiki/Fork_off_and_die daemon이라는 게 그리 거창한 게 아니라 다른 프로세스의 간섭을 받지 않고 뒤에서 조용히 돌아가는 프로그램이기 때문에 이런 식의 구조를 많이 사용해요.
쉘에서 실행하는 경우 그 행동이 더 명확해지는데, 쉘에서 프로그램을 실행하면 쉘은 그 프로그램이 끝날 때까지 기다리게 되는데, 여기에서 parent가 child를 만들고 종료하면 child는 계속 작동하지만 parent가 종료했기 때문에, 쉘은 다시 입력 모드로 돌아오게 됩니다.
인용: 쉘에서
아하~바로 이 목적인거 같네요.
답변 감사합니다.
daemon mode로 동작하게
daemon mode로 동작하게 하는 거라면, BSD에서 POSIX로 도입된 daemon() 함수를 쓰면 됩니다.
...
http://kldp.org/node/52335
예전의 글들을 잘 읽어 보면 도움이 되는 경우가 많이 있겠습니다.
검색어: setsid 가 좋겠습니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
오옷~
fork 함수를 써 본적은 있지만, 이런 방식으로도 쓸 수 있는 것을 오늘 알았습니다. ^^
댓글 달기