Да, структура task_struct
содержит всю информацию о процессе. Вы можете получить указатель на структуру, которая описывает текущий процесс, используя макрос current
следующим образом:
struct task_struct *p = current;
Если вы хотите получить структуру, которая описывает процесс с pid
, вы можете использовать функцию find_task_by_vpid
следующим образом:
read_lock(&tasklist_lock);
p = find_task_by_vpid(pid);
if (p) get_task_struct(p);
read_unlock(&tasklist_lock);
if (p == NULL) {
// Task not found.
}
// Later, once you're finished with the task, execute:
put_task_struct(p);
Наконец, если вы хотите перебрать все процессы, вы можете использовать for_each_process
следующим образом:
read_lock(&tasklist_lock);
for_each_process(p) {
// p is a pointer to a task_struct instance.
}
read_unlock(&tasklist_lock);
Если вы хотите иметь эксклюзивный доступ к списку задач, чтобы иметь возможность вносить изменения в одно или несколько полей в структуре, вместо 10101 * следует использовать write_lock_irqsave
.