리눅스는 자식 프로세스와는 별도로 스레드를 어떻게 알려줍니까?


답변:


28

A로부터 task_struct관점, 프로세스의 스레드 (동일한 스레드 그룹 리더가 group_leadertask_struct 자식 프로세스가 다른 스레드 그룹 리더 (각 개별 자식 프로세스)가있는 반면,).

이 정보는 사용자 공간에 노출 을 통해/proc 파일 시스템. 또는 의 ppid필드를 보면 부모와 자녀를 추적 할 수 있습니다 (부모가 pid를 제공함). 필드를 보고 스레드를 추적 할 수 있습니다 (이것은 그룹 리더의 pid 인 스레드 그룹 ID를 제공합니다). 프로세스 스레드는 디렉토리에 표시됩니다 . 각 스레드는 자체 하위 디렉토리를 가져 옵니다 . (모든 프로세스에는 하나 이상의 스레드가 있습니다.)/proc/${pid}/stat.../statustgid.../status/proc/${pid}/task

실제로 자체 스레드를 추적하려는 프로그램은 OS 별 정보를 사용하는 대신 사용중인 스레딩 라이브러리에서 제공하는 API를 사용합니다. 일반적으로 pthread를 사용하는 유닉스 계열 시스템에서.


쉘 파이프 라인 (echo foo | cat)의 각 프로세스는 동일한 그룹 리더 (shell)를 공유하지만 동일한 프로세스의 스레드는 아닙니다.
psusi

2
프로세스 그룹에 대해 이야기하고 있습니다. 내 대답에서, 그룹 리더는 커널 관점에서입니다. 커널 회계에서 별도의 프로세스는 자체 그룹 리더입니다. 각 프로세스 파일 (sleep 120 | sleep 120) &Tgid값 을 실행 하고 살펴보면 이를 확인할 수 있습니다 . sleep/proc/${pid}/status
Stephen Kitt

오 이상해 "스레드 그룹 리더"와 같은 것이 있다는 것을 몰랐으며 멀티 스레드 프로세스의 모든 스레드가 동일하고 "리더"가 없다고 생각했습니다. 그것들 중 하나라도 빠져 나갈 수 있고, 남아있는 한 프로세스는 종료되지 않습니다.
psusi

5
  1. top몇 가지 추가 옵션으로 명령을 실행합니다 .

    top -H -b -n 1
    
    • -H인수는 top에 각 개별 스레드를 표시하도록 지시합니다. 일반적으로 top은 상위 프로세스 하의 모든 스레드를 요약합니다.
    • -b인수는 배치 모드에서 정상 실행한다 - 정보가 수집, 표시 및 대화 형 모드에서 실행하고 데이터가 표시 새로 고침에 반대 한 후 표준 출력에 덤프.
    • -b옵션을 사용하면 사용자는 몇 번을 실행해야하는지 알아야합니다.이 작업은 -n인수 로 수행되며 마지막 인수는 실행 횟수로 수행됩니다.

    따라서 top -H -b -n 1시스템에 "최상위 실행, 개별 스레드 표시, 배치 모드에서 실행 및 한 번만 실행"을 지시합니다.

  2. ps명령은 현재 실행중인 프로세스의 스냅 샷을보고합니다.

    ps -eLf
    

    -eLf인수 ( 또한 사용 가능 -e -L -f)는 다음과 같이 분류됩니다.

    • eps누가 프로세스를 소유하고 있는지 또는 현재 상태 (활성, 휴면, 일시 중지, I / O 대기 등)에 관계없이 모든 프로세스를 표시하도록 지시 합니다.
    • Lps개별 스레드를 표시하도록 지시 합니다.
    • f지시 ps와 풀 포맷 리스팅로서 출력과 함께 포맷 LNLWP (스레드의 수)와 LWP은 (쓰레드 ID) 열 출력에 추가되는 인자.

1

PID p1을 사용한 프로세스 고려

task_struct자식 프로세스 의 객체는 p1로 PPID (부모 PID)를 가지며 PID와 TGID는 p2로 설정됩니다.

task_struct(P1)의 스레드의 목적은 P1에 관해서는 PID 세트, 말의 P3하지만 TGID 설정해야합니다.


그래서 당신은 Stephen Kitt와 같은 것을 말하지만 훨씬 덜 명확합니다. 추신 : 스레드의 PPID가 무엇인지 말하지 않으려는 경우 PPID를 토론에 가져 오는 것이 왜 귀찮습니까?
Scott

PID와 TGID는 항상 같습니다.
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.