Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
Docbook 원문

setsid(2)

1장. setsid(2)

차례
1.1. 사용법
1.2. 설명
1.3. 반환값
1.4. 에러
1.5. 예제
1.6. 참고문헌

세션을 만들고 프로세스(:12) 그룹아이디(GID)를 설정한다.


1.1. 사용법

#include <unistd.h>

pid_t setsid(void);
		


1.2. 설명

만약 setsid()를 호출하는 프로세스(:12)가 프로세스 그룹의 리더가 아니라면 새로운 세션을 생성하고 해당 세션에 대한 그룹의 리더가 되며, tty(:12)를 제어할 수 없게 된다. 이렇게 setsid()를 호출해서 세션을 생성하고 그룹의 리더가 되었다면 세션아이디와 그룹아이디는 프로세스아이디(PID)와 동일하게 된다. 이후 이 프로세스에서 생성되는 모든 (자식)프로세스들은 이 세션 아이디와 그룹아이디를 가지게 된다.

참고: 프로세스 그룹의 리더는 자신의 PID와 그룹아이디가 동일하다. setsid()는 특히 데몬(:12)으로 작동하는 프로그램을 만들기 위해서 주요하게 사용된다. 이럴 경우 fork()후 부모프로세스(:12)를 종료하고 setsid()를 호출하게 된다.


1.3. 반환값

호출한 프로세스의 세션 아이디를 리턴한다.


1.4. 에러

에러가 발생했을 경우 -1을 리턴한다. 에러는 EPERM일 경우에만 발생한다. 이 에러는 프로세스가 어떤 이유로 다른 프로세스가 사용하는 PID(:12)를 세션아이디로 사용하려고 할때 발생한다.


1.5. 예제

#include <sys/types.h> 
#include <sys/stat.h> 
#include <stdio.h> 
#include <fcntl.h> 

int main()
{
    pid_t   pid;

    if (( pid = fork()) < 0)
   	    exit(0);

    // 부모프로세스를 종료한다. 
    else if(pid != 0)
        exit(0);

    // 데몬 프로그램은 상호대화할 일이 없으므로 
    // 표준입/출/에러를 닫는다. 
    close(0);  
    close(1);
    close(2);
    // 세션을 생성한다. 
    setsid();    
    // 데몬 프로그램이 실행할 코드를 작성한다.
    while(1)
    {
    } 	
}
		
위의 프로그램은 setsid()를 이용해서 데몬프로그램을 만드는 전형적인 예제다.