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도 아니게 되므로 컨트롤링 터미널을 절대 가질 수 없게 되겠죠.
'IT_Programming > System Programming' 카테고리의 다른 글
Gcc Complie & Linking (0) | 2009.05.19 |
---|---|
[Linux] 데몬 프로세스 만들기 (1) | 2008.01.25 |
[Linux] 프로세스 체인, 프로세스 팬 만들기 (0) | 2008.01.19 |
[Linux] 세마포어 핸들링 (0) | 2007.11.18 |
linux man page : Linux System Call 모음 (0) | 2007.10.03 |