首页 > 解决方案 > 获取进程信息(当前进程、父进程、最早的子进程)

问题描述

我有一个关于在 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, &buff, sizeof(buff));
 if(res == 0) printk("success!");
 else printk("fail");
 return 0;
 //}
 }
 }
 return -1;
 }

如何实现这个系统调用?谢谢

标签: linuxstructprocesslinux-kernelparent

解决方案


推荐阅读