일단 데몬이라는 걸 어떻게 짜야 하는건지 샘플을 보고 싶은데 참조할만한
소스가 있을까요? 리눅스상에 돌아가는 데몬들이 많은데 어느 부분이 정작
필요한 부분인지 알기가 쉽지 않군요. 나름대로 분석을 시도해봤지만..ㅠㅠ

경험자분들의 조언 부탁드리겠습니다. 감사합니다. -_- _-_ -_-.


========================================================================================================

새로운 session의 리더가 되고, stdin, stdout이 닫혀있으면 될꺼 같습니다.

 
void startDaemon()
{
pid_t pid;

if ((pid = fork()) < 0)
exit(0);
else if(pid != 0) exit(0); // close parent process

// close standard output and input
close(0);
close(1);
close(2);

setsid(); // start a new session as a child of init.

return;
}


========================================================================================================

Unix Network Programming 에 보면 daemon_init() 라는 함수가 나와 있습니다. 이 정도면 충분할 듯 하네요..

 
#include    "unp.h"
#include <syslog.h>

#define MAXFD 64

extern int daemon_proc; /* defined in error.c */

void
daemon_init(const char *pname, int facility)
{
int i;
pid_t pid;

if ( (pid = Fork()) != 0)
exit(0); /* parent terminates */

/* 41st child continues */
setsid(); /* become session leader */

Signal(SIGHUP, SIG_IGN);
if ( (pid = Fork()) != 0)
exit(0); /* 1st child terminates */

/* 42nd child continues */
daemon_proc = 1; /* for our err_XXX() functions */

chdir("/"); /* change working directory */

umask(0); /* clear our file mode creation mask */

for (i = 0; i < MAXFD; i++)
close(i);

openlog(pname, LOG_PID, facility);
}



WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,