`ps`의“세션 리더”는 무엇입니까?


78

세션 리더를 ps -d제외한 모든 프로세스를 선택하는 세션 리더 란 무엇입니까 ?

답변:


84

Linux에서는 모든 프로세스에 다음과 같은 여러 ID가 연결되어 있습니다.

  • 프로세스 ID (PID)

    프로세스를 식별하는 임의의 숫자입니다. 모든 프로세스에는 고유 한 ID가 있지만 프로세스가 종료되고 상위 프로세스가 종료 상태를 검색 한 후 새 프로세스에서 프로세스 ID를 재사용 할 수 있습니다.

  • 상위 프로세스 ID (PPID)

    이것은 해당 프로세스를 시작한 프로세스의 PID 일뿐입니다.

  • 프로세스 그룹 ID (PGID)

    프로세스 그룹 리더의 PID 일뿐입니다. PID == PGID 인 경우이 프로세스는 프로세스 그룹 리더입니다.

  • 세션 ID (SID)

    세션 리더의 PID 일뿐입니다. PID == SID 인 경우이 프로세스는 세션 리더입니다.

세션과 프로세스 그룹은 여러 관련 프로세스를 하나의 단위로 취급하는 방법 일뿐입니다. 프로세스 그룹의 모든 구성원은 항상 동일한 세션에 속하지만 한 세션에는 여러 프로세스 그룹이있을 수 있습니다.

일반적으로 셸은 세션 리더가되고 해당 셸에서 실행되는 모든 파이프 라인은 프로세스 그룹이됩니다. 이것은 쉘이 종료 될 때 자식을 쉽게 죽일 수 있도록하기위한 것입니다. 자세한 내용은 exit (3) 를 참조하십시오.

나는 리더가 아닌 세션 또는 프로세스 그룹의 구성원에 대한 특별한 용어가 없다고 생각합니다.


5
참고 : ps xao pid,ppid,pgid,sid,comm이 ID를 보려면 사용하십시오 .
Mike R

1
왜 사람들은 설명을 실제 비교를 기반으로 답변을 더 많이 제공하지 않습니다 .. 한
RootPhoenix

24

세션 리더는 세션 ID == 프로세스 ID 인 프로세스입니다. 이것은 생각되는 것처럼 들리지만 세션 ID는 자식 프로세스에 의해 상속됩니다. UNIX / Linux 내의 일부 작업은 프로세스 세션에서 작동합니다 (예 : kill 시스템 호출 또는 명령으로 보낼 때 프로세스 ID 무시). 가장 일반적인 용도는 쉘에서 로그 아웃 할 때입니다. OS kill -HUP -$$는를 보내고 , 이것은 쉘과 동일한 세션 ID를 가진 모든 프로세스에 SIGHUP (hangup) 신호를 보냅니다. 프로세스를 제거하면 프로세스의 세션 ID가 셸에서 변경되므로 행업 신호에 응답하지 않습니다. 이것은 데몬 프로세스가되는 프로세스의 일부입니다.

창 관리자 / 그래픽 환경에서 호출 된 대부분의 프로세스는 시작 프로그램 중 하나와 동일한 세션 ID를 갖습니다. 이를 통해 OS는 kill -HUP -$$브라우저, 음악 플레이어, libreoffice, IM 클라이언트 등과 같은 모든 프로그램 에서 동일한 작업 을 수행 할 수 있습니다 . 이들은 세션 리더가 아닌 프로세스입니다.


신경 쓰지 말고 좀 더 설명이 필요할 수 있습니다.-세션 리더는 하나이며 다른 사람들은 무엇이며 어떤 것이 좋습니까 (행동, 세션 리더와 다른 점은 무엇입니까)?
its_me

그들은 세션의 회원이라고합니다.
Arcege

나는 당신의 설명을 좋아하지만 여전히 한 가지 요점을 놓치고 있습니다. IIUC, 내가 시작한 모든 프로세스는 실제로 내가 로그인 한 쉘의 자식입니다 (물론 그것을 제거하지 않는 한). OS가 왜 프로세스 트리를 걷고이 프로세스의 형제와 형제를 모두 죽이지 않는가? (실제로 그것이 내가 항상 생각했던 것입니다 ... 오늘날까지 : D) 그렇다면 세션을 대신 사용하는 이유는 무엇입니까?
Alois Mahdal

프로세스가 더 이상 원래 세션의 일부가 아닌시기 (예 : 로그인 쉘 또는 데몬)를 결정하지 않아도됩니다. 한 가지 생각은 PPID (부모 pid)를 자동으로 1로 변경하는 것이지만 프로세스 트리를 손상시킵니다. 새 세션 ID는 신호를 함께 보낼 수있는 그룹을 만듭니다. 예를 들어 GUI는 파이어 폭스를 별도의 세션으로 시작합니다. 그런 다음 [X] 버튼을 누르면 파이어 폭스 세션과 그 자식 신호를 보내지 만 창 관리자는 영향을받지 않습니다. PPID-PID와의 직접적인 관계로는이 작업을 수행 할 수 없습니다.
Arcege

GUI가 종료되면 세션 그룹이 아닌 전체 프로세스 트리가 신호를 얻을 수 있습니다. 두 가지 다른 원하는 동작 : 하나의 '앱'(파이어 폭스 및 해당 플러그인 제거)과 모든 하위 프로세스 종료 (gui 종료). 이맥스와 크롬과 비슷한 작업을 기대합니다.
Arcege

13

나는 이것에 대한 답을 알고 있다고 생각했지만 이것을 이해하기 위해 C 프로그램을 작성했습니다.

#include <stdio.h>
#include <unistd.h>

int
main(int ac, char **av)
{
        pid_t sid, mypid, pgid, gid;

        mypid = getpid();
        sid = getsid(0);
        pgid = getpgid(0);
        gid = getpgrp();

        printf("PID %d\n", mypid);
        printf("process group ID of session leader: %d\n", sid);
        printf("process group ID: %d\n", pgid);
        printf("process group ID: %d\n", gid);

        if (!fork())
        {
                mypid = getpid();
                sid = getsid(0);
                pgid = getpgid(0);
                gid = getpgrp();

                printf("child PID %d\n", mypid);
                printf("process group ID of session leader: %d\n", sid);
                printf("process group ID: %d\n", pgid);
                printf("process group ID: %d\n", gid);

                _exit(0);
        }

        return 0;
}

나는 cc -g -o sid sid.c 몇 가지 다른 방법으로 그것을 실행하여 어떤 일이 일어나는지 보았습니다.

./sid
nohup ./sid > sid.out
setsid ./sid

나는 리눅스 (2.6.39)가 돌려 준 것에 놀랐다. 또한 섹션 7 매뉴얼 페이지 "자격 증명"을 찾았습니다.

내 조언은 man 7 credentials(또는 Linux가 아닌 경우 동등한 것) 프로세스 그룹 및 세션에 대한 섹션을 읽고 퍼즐을 풀 수 있는지 확인하는 것입니다.


1
리눅스 초보자이기 때문에 나는 당신이 말한 것을 알아낼 수 없었습니다. 당신이 너무 당황한 것 같아? 그러나 당신은 아마도 Arcege의 대답이 무엇을 의미하는지 충분히 알고있을 것입니다. 그렇게하면 더 명확하게 설명해 주시겠습니까?
its_me

흥미 롭습니다 ... 감사합니다 ... 그래서, 세션 ID (SID)는 터미널의 PID 이며 ./sidnohup ./sid을 실행할 때 setsid ./sid세션 ID (SID)는 아주 새롭고 프로세스 PID와 같습니다. 왜 nohup이 포크를 막았는지 (또는 것 같습니다) 모르겠지만, 일반적인 아이디어를 가지고 있다고 생각합니다 ...
Peter.O
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.