Получить информацию о процессе (текущий процесс, родительский процесс, самый старый дочерний процесс) - PullRequest
1 голос
/ 23 октября 2019

У меня есть упражнение по добавлению системного вызова в ядре Linux, но я изо всех сил пытаюсь его реализовать. Ниже приведено описание:

Основная часть этого назначения заключается в реализации нового системного вызова, который позволяет пользователю определять информацию как о родительском, так и о самом старшем дочернем процессе. Информация об информации о процессах представлена ​​следующей структурой:

struct procinfos{
    long studentID;
    struct proc_info proc;
    struct proc_info parent_proc;
    struct proc_info oldest_child_proc;
};

Где proc_info определяется следующим образом:

struct proc_info{
    pid_t pid;
    char name[16];
};

procinfos содержит информацию о трех процессах:

  • proc, текущий процесс или процесс с PID
  • parent_proc, родительский процесс первого процесса
  • oldest_child_proc, самый старый дочерний процесспервого процесса

Информация о процессах хранится в структуре proc_info и содержит:

  • pid, идентификатор процесса
  • name, имя программы, которая выполняется

Прототип нашего системного вызова описан ниже:

Чтобы вызвать get_proc_info системный вызов, пользователь долженукажите PID процесса или −1 в случае текущего процесса. Если системный вызов находит процесс с заданным PID, он получает информацию о процессе, помещает ее в выходной параметр *info и возвращает 0. Однако, если системный вызов не может найти такой процесс, он вернет EINVAL.

#include <linux/kernel.h>
#include <unistd.h>
struct procinfos{
    long studentID;
    struct proc_info proc;
    struct proc_info parent_proc;
    struct proc_info oldest_child_proc;
};
struct proc_info{
    pid_t pid;
    char name[16];
};
asmlinkage long sys_get_proc_info(pid_t pid, struct proinfos *info){
// TODO: implement the system call
}

СОВЕТ:

  • Чтобы найти текущий процесс: посмотрите на arch/x86/include/asm/current.hили для простого использования макроса current (current -> pid).
  • Чтобы найти информацию о каждом процессе, посмотрите include/linux/sched.h.
  • Чтобы после процесса обрезки время для сборки ядра былосокращено до 10 минут, но это долго компилируется. Чтобы как можно быстрее приступить к разработке системного вызова, вы можете использовать модуль ядра, чтобы заранее протестировать системный вызов, представленный в виде модуля (приложение B).

Как реализовать этот системный вызов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...