2013-08-04 2 views
2

모든 프로세스의 다음 및 이전 프로세스를 알고 싶습니다. 상태는 "TASK_RUNNING"입니다. 이전 커널에는 task_struct의 멤버로서 run_list 구조체가 있습니다. 커널 3에서 어떻게하면됩니까? 예를 들어, 실행중인 프로세스 목록을 추적하는 중, 커널 3에서 어떤 구조체가 그러한 목록으로 정의되어 있는지 알 수 없습니다.커널 3의 연결된 프로세스 목록 *

답변

3

최신 커널에서 Linux는 실행중인 모든 프로세스의 목록을 유지 관리하지 않습니다. 대신 CFS는 실행중인 프로세스에 대한 정보를 저장하기 위해 sched_entity의 red-black 트리를 사용합니다.

task_struct에는 sched_entity 유형의 회원 se이 포함되어 있습니다. Sched 엔티티에는 struct rb_node 유형의 구성원 run_node이 포함되어 있습니다. 이것이 당신이 찾고있는 것입니다.

rbtree의 인터페이스는 include/linux/rbtree.h와 상담하십시오. task_structsched_entity에서 추출하려면 (task_of()kernel/sched/fair.c)을 사용할 수 있습니다.

+0

당신은'rb tree '를 실행중인 프로세스 목록으로 트래버스해야한다는 것을 의미합니까? – Mjina

+0

예. 그것이 내가 의미하는 바입니다. –

+0

작업 목록에있는 작업의 상태가 1 (인터럽트 가능)이면 'sched_entity'가 없습니다. 또는'sched_entity'을 가지고 있지만 비어 있습니다. – Mjina