Получение информации о процессе (текущий процесс, родительский процесс, самый старый дочерний процесс)

#linux #struct #process #linux-kernel #parent

#linux #структура #процесс #linux-ядро #родительский

Вопрос:

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

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

 #include <linux/unistd.h>
#include <linux/linkage.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/uaccess.h>
#include <linux/sched/signal.h>

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

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

 asmlinkage long sys_get_proc_info(pid_t pid, struct procinfos *info){
 struct task_struct *task = pid_task ( find_vpid ( pid ) , PIDTYPE_PID);
 printk("Finding...n");
 for_each_process(task) {
 printk("[%d] ------- [%s]n", task->pid, task->comm);
 if(task->pid == pid) {
 struct procinfos buff;
 buff.studentID = 1952598;
 buff.proc.pid = task->pid;
 buff.parent_proc.pid = task->parent->pid;
 int res = copy_to_user(info, amp;buff, sizeof(buff));
 if(res == 0) printk("success!");
 else printk("fail");
 return 0;
 //}
 }
 }
 return -1;
 }
 

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