/proc/에 tid가 포함되어 있나요?

/proc/에 tid가 포함되어 있나요?

내 프로세스 ID는 1234입니다. 프로세스에 스레드 ID 1235가 포함되어 있습니다.

를 사용하면 ls -l /procpid(1234)만 보이지만 을 사용하여 스레드 상태 파일을 열면 cat /proc/1235/status데이터가 보입니다.

왜 그런 겁니까?

C 코드를 사용하여 tid로 직접 접근할 수 있나요? /proc/1235/mem프로세스 ID를 모르시나요?

답변1

예, /proc스레드 식별자와 프로세스 식별자를 "포함"하는 디렉터리 항목이 있지만 후자만 열거되므로 getdents프로세스 ls식별자만 표시됩니다. 이것은man 5 proc, 개요 섹션에서매뉴얼 페이지 프로젝트 버전 5.00:

/proc/[pid]하위 디렉토리

이것/proc/[pid]반복 시 하위 디렉터리가 표시됩니다./프로세스그리고getdents(2)(사람들이 사용할 때 볼 수 있음ls(1)콘텐츠 보기/프로세스).

/proc/[tid]하위 디렉토리

이것/proc/[tid]하위 디렉토리는아니요반복 중에 표시됨/프로세스그리고getdents(2)(그러므로 그것은아니요사용시 보이는ls(1)콘텐츠 보기/프로세스).

왜 그런 겁니까?

나는 이것이 이전 버전과의 호환성을 유지하고(스레드가 Linux에서 현재 형태로 존재하기 전에 작성된 프로그램의 경우) 확장성 문제를 제한하기 위한 것이라고 생각합니다.

C 코드를 사용하여 tid로 직접 접근할 수 있나요? /proc/1235/mem프로세스 ID를 모르시나요?

네, tid를 알면 /proc/${tid}pid를 거치지 않고 바로 접근이 가능합니다.

스레드를 열거하려는 경우 아래 디렉터리 항목을 나열할 수 있습니다. /proc/${tid}/task/이는 프로세스 식별자뿐만 아니라 모든 스레드 식별자에 대해 작동합니다.

관련 정보