커널은 어떤 "스레드"/프로세스가 프로세스와 연관되어 있는지 어떻게 알 수 있습니까? [복사]

커널은 어떤 "스레드"/프로세스가 프로세스와 연관되어 있는지 어떻게 알 수 있습니까? [복사]

내가 읽은 대로, Linux에서 "스레드"는 단지 프로세스일 뿐입니다.

프로세스가 두 개의 "스레드"를 생성한다고 가정합니다. 이제 프로세스가 종료되면 해당 프로세스와 관련된 두 개의 "스레드"/프로세스도 종료됩니다.

프로세스(프로세스를 생성한)와 관련된 "스레드"/프로세스에 대한 정보는 어디에 저장되어 있습니까?

답변1

정보는 메모리에 저장됩니다.작업 구조는 다음과 같습니다.task_struct각 프로세스/스레드와 연관됩니다. 이 모든 정보는 /proc다음에 설명된 대로 평소와 같이 의사 파일 시스템에 제공됩니다.man 5 proc.

프로세스가 종료되어 사라지면 커널은 메모리( 에서 편리하게 볼 수 있음)의 프로세스와 관련된 스레드 목록을 분석하여 /proc/[pid]/task/종료합니다.

Linux의 프로세스/스레드 표현 모델은 프로세스와 스레드를 너무 많이 분리하지 않으며 둘 다 작업입니다. 예를 들어 /proc/조직에 표시된 것과 동일한 작업 네임스페이스를 공유합니다.PID(프로세스 ID) 또는tid(스레드 ID)는 동일합니다. 그러나 차이점이 있습니다.getpid()스레드를 반환합니다PID, 하지만게티드()는 스레드의 값을 반환합니다.tid. 스레드가 호출할 때 다른 값을 반환할 수 있습니다.

질문과 관련하여 해당 의사 파일이 다음에 매핑됩니까?작업 구조콘텐츠:

  • /proc/[pid]/task/

    이는 프로세스의 각 스레드에 대한 하위 디렉터리를 포함하는 디렉터리입니다. 각 하위 디렉토리의 이름은 스레드의 숫자 스레드 ID([tid])입니다(gettid(2) 참조). 각 하위 디렉터리에는 /proc/[pid] 디렉터리와 이름 및 내용이 동일한 파일 세트가 있습니다. 모든 스레드가 공유하는 속성의 경우 task/[tid] 하위 디렉터리에 있는 각 파일의 내용은 상위 /proc/[pid] 디렉터리에 있는 해당 파일의 내용과 동일합니다(예: 멀티 스레드 프로세스), 모든 작업/ 프로세스의 모든 스레드가 작업 디렉터리를 공유하므로 [tid]/cwd 파일은 상위 디렉터리의 /proc/[pid]/cwd 파일과 동일한 값을 갖습니다. 작업/[tid] 아래의 해당 파일은 스레드마다 다른 속성에 대해 서로 다른 값을 가질 수 있습니다(예: 각 작업/[tid]/상태 파일의 개별 필드는 스레드마다 다를 수 있음). 다른 가치. /proc/[pid]에는 전혀 존재하지 않습니다. 다중 스레드 프로세스에서 기본 스레드가 종료되면(일반적으로 pthread_exit(3) 호출을 통해) /proc/[pid]/task 디렉터리의 내용을 사용할 수 없습니다.

  • /proc/[pid]/status

    Tgid: 스레드 그룹 ID(즉, 프로세스 ID).

    이 의사 파일에는tgid항목, 프로세스의 모든 스레드는 동일한 값(또는tid~의PID).

man 7 pthreads자세한 내용은 현재 설명에서 확인할 수 있습니다.NPTL 구현하다.

답변2

첫 번째 스레드(init)를 제외하고 모든 스레드에는 상위 스레드가 있습니다. "ps faux"(따옴표 제외)와 같이 ps에 f 플래그를 사용하면 관계를 가장 잘 볼 수 있습니다.

답변3

/bin/ps -eo pid,nlwp,tid,args -L

관련 정보