IT_Programming/System Programming

[Linux] 데몬을 위한 fork()

JJun ™ 2007. 12. 15. 00:08

    if ((child = fork()) < 0)

           return -1;
    if (child != 0)

           exit(0);

 

    setsid();               /*  make session leader  */

    signal(SIGHUP, SIG_IGN);        /*  ignore SIGHUP        */

 

   if ((child = fork()) < 0)

           return -1;
    if (child != 0)

           exit(0);

 

데몬으로 만들기 위해서입니다.
터미널에서 프로그램을 실행하면 터미널의 child가 되니 터미널을 종료하거나 중지하면 해당 프로세스가 종료됨을 방지하기 위해서입니다

.....................................................................................................................................
우선 이렇게 하면 이 프로그램을 invoke한 터미널에 제어를 돌려줄 수 있습니다.
그리고 setsid를 해서 기존의 프로세스들과 무관한 session을 만들수 있고요.
목적은 물론 윗분이 쓰신데로 daemon을 만들기 위한 거겠죠.
좀 더 완벽을 기하고 싶다면 이 상태에서 fork를 한번 더하면 이 프로세스가 session leader도 아니게 되므로 컨트롤링 터미널을 절대 가질 수 없게 되겠죠.