Friday, April 4, 2008

Daemons

Daemon은 background에서 동작하고, terminal에 연결되지 않은 상태로 동작하는 프로세스를 의미한다. 통상 'd'로 끝나는 이름을 가지고, 아래와 같은 순서로 생성할 수 있다.
  1. fork()
  2. 부모 프로세스는 exit()
  3. setsid()로 새로운 세션을 가진다. (예전 세션이나 pgid로 종료 signal을 받을 수 있기 때문)
  4. chdir()로 작업 디렉토리를 '/'로 바꾼다. (엉뚱한 데를 물고 있다 unmount할 때 문제를 만드는 수가 있다.)
  5. 부모로 부터 받은 fd를 모두 닫는다.
  6. 0,1,2 (in,out,err) I/O를 /dev/null에 연결한다.

이를 기반으로 daemon을 만들 수 있으나, 귀찮다. 그래서 daemon() 함수를 제공하고 있다.



#include <unistd.h>

int daemon(int nochdir, int noclose);

nochdir가 0이 아니면 dir path를 안바꾸고, noclose가 0이 아니면 fd를 안 닫는다.

No comments:

Post a Comment