만약 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)
{
}
}
1장. setsid(2)
세션을 만들고 프로세스(:12) 그룹아이디(GID)를 설정한다.
1.1. 사용법
1.2. 설명
만약 setsid()를 호출하는 프로세스(:12)가 프로세스 그룹의 리더가 아니라면 새로운 세션을 생성하고 해당 세션에 대한 그룹의 리더가 되며, tty(:12)를 제어할 수 없게 된다. 이렇게 setsid()를 호출해서 세션을 생성하고 그룹의 리더가 되었다면 세션아이디와 그룹아이디는 프로세스아이디(PID)와 동일하게 된다. 이후 이 프로세스에서 생성되는 모든 (자식)프로세스들은 이 세션 아이디와 그룹아이디를 가지게 된다.
1.3. 반환값
호출한 프로세스의 세션 아이디를 리턴한다.
1.4. 에러
에러가 발생했을 경우 -1을 리턴한다. 에러는 EPERM일 경우에만 발생한다. 이 에러는 프로세스가 어떤 이유로 다른 프로세스가 사용하는 PID(:12)를 세션아이디로 사용하려고 할때 발생한다.
1.5. 예제
1.6. 참고문헌
데몬프로그램에 대한 이해
데몬작성 예제
Recent Posts
Archive Posts
Tags