Linux 커널에서 모든 작업의 생성자 작업을 찾고 싶습니다. 그러나 이를 수행할 수 있는 방법이 있는지 확실하지 않습니다.
real_parent
일반적으로 작업의 구성원을 기준으로 작업 작성자를 찾을 수 있습니다 struct task_struct
. 내 문제는 커널의 스레드 그룹 처리에 있습니다.
사용자 모드의 프로세스(커널의 작업 A)가 스레드(커널의 작업 B)를 생성한다고 가정합니다. 이를 위해 이 플래그를 사용하여 clone
시스템 호출이 CLONE_THREAD
이루어집니다. 그런 다음 커널은 작업 A를 복사하여 작업 B를 생성하고 스레드별 초기화를 수행합니다. 그 중 일부는 real_parent
B가 real_parent
A로 설정된다는 것입니다(kernel/fork.c의 코드를 참조하세요.).
따라서 상위 관계는 작업 간이 아니라 스레드 그룹(즉, 사용자 모드의 프로세스) 간입니다. 스레드 그룹의 작업은 그들 사이에 계층 구조 없이 형제로 취급되는 것처럼 보입니다.
이로 인해 주어진 작업이 어떤 작업에 의해 생성되었는지 알아내는 방법이 불분명해졌습니다. 포크된 코드를 확인하고 회원을 검색해봤으나 struct task_struct
아무것도 나오지 않았습니다. 작업 작성자를 식별할 수 있는 방법이 있나요?