프로 세 스 관계 - 세 션

회화
       세 션 은 하나 이상 의 프로 세 스 그룹의 집합 입 니 다. 보통 셸 의 파이프 라인 에서 몇 개의 프로 세 스 를 한 그룹 으로 묶 습 니 다.세 션 의 첫 번 째 프로 세 스 는 세 션 을 새로 만 들 때 세 션 의 유일한 프로 세 스 입 니 다. 프로 세 스 ID 는 세 션 ID 와 같 습 니 다.
       새 세 션 과 세 션 의 첫 번 째 프로 세 스 를 가 져 오 는 프로 세 스 그룹 ID 의 함수 입 니 다.
/* 会话 */

/*
 * 函数功能:建立一个新会话;
 * 返回值:若成功则返回进程组ID,若出错则返回-1;
 * 函数原型:
 */
#include <unistd.h>

pid_t setsid(void);

/*
 * 函数功能:获取会话首进程的进程组ID;
 * 返回值:若成功则返回会话首进程的进程组ID,若出错则返回-1;
 * 函数原型:
 */
pid_t getsid(pid_t pid);
/*
 * 若pid = 0,则返回调用进程的会话首进程的进程组ID;
 */

       setsid 함 수 를 호출 하 는 프로 세 스 가 프로 세 스 팀장 이 아니라면 이 함 수 는 새 세 션 을 만 들 것 입 니 다. 결 과 는 다음 세 가지 가 발생 합 니 다.
  • 이 프로 세 스 는 새 세 션 의 첫 번 째 프로 세 스 (session leader) 로 변 합 니 다.(세 션 의 첫 번 째 프로 세 스 는 이 세 션 을 만 드 는 프로 세 스 입 니 다) 이 프로 세 스 는 새 세 션 의 유일한 프로 세 스 입 니 다.
  • 이 프로 세 스 는 새 프로 세 스 그룹의 팀장 프로 세 스 라 고 합 니 다. 새 프로 세 스 그룹 ID 는 이 호출 프로 세 스 의 프로 세 스 ID 입 니 다.
  • 이 프로 세 스 는 터미널 을 제어 하지 않 았 습 니 다. setsid 를 호출 하기 전에 이 프로 세 스 가 제어 터미널 이 있 으 면 이러한 연락 도 중 단 됩 니 다.

  •         이 호출 프로 세 스 가 프로 세 스 그룹의 팀장 이 라면 이 함 수 는 오 류 를 되 돌려 줍 니 다.이러한 상황 이 발생 하지 않도록 하기 위해 서 는 보통 fork 를 호출 한 다음 에 아버지 프로 세 스 를 종료 시 키 면 하위 프로 세 스 는 계 속 됩 니 다.하위 프로 세 스 가 부모 프로 세 스 의 프로 세 스 그룹 ID 를 계 승 했 기 때문에 프로 세 스 ID 는 새로 분 배 된 것 으로 하위 프로 세 스 가 프로 세 스 그룹의 팀장 이 아 닐 것 을 보장 합 니 다.
    테스트 프로그램:
    #include "apue.h"
    #include <sys/types.h>
    
    int main(void)
    {
        pid_t pid;
        if((pid = fork()) < 0)
            err_sys("fork error");
        else if(0 == pid)
        {
            setsid();
            printf("child process pid is %d
    ",getpid()); printf("group id is %d
    ",getpgid(0)); printf("My father id is %d
    ",getppid()); printf("My session id is %d
    ",getsid(0)); } else { printf("parent process pid is %d
    ",getpid()); printf("group id is %d
    ",getpgid(0)); printf("My father id is %d
    ",getppid()); printf("My session id is %d
    ",getsid(0)); } }
    출력 결과:
    parent process pid is 4854
    group id is 4854
    My father id is 2982
    My session id is 2982
    child process pid is 4855
    group id is 4855
    My father id is 1
    My session id is 4855
    

    좋은 웹페이지 즐겨찾기