#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;
}
Как реализовать этот системный вызов? Спасибо