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도 아니게 되므로 컨트롤링 터미널을 절대 가질 수 없게 되겠죠.