【问题标题】:Get Process Info (Current proc, parent proc, oldest child proc)获取进程信息(当前进程、父进程、最老的子进程)
【发布时间】:2020-02-19 15:05:11
【问题描述】:

我有一个关于在 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,进程的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 或简单地使用宏当前(当前 -> pid)。
  • 要查找有关每个进程的信息,请查看include/linux/sched.h
  • 在修整过程之后,构建内核的时间减少到大约 10 分钟,但编译时间很长。为了尽可能快地开发系统调用,您可以使用内核模块预先测试以模块表示的系统调用(Appd B)。

如何实现这个系统调用?

【问题讨论】:

  • 欢迎来到 Stack Overflow!虽然这里不禁止“家庭作业”问题,但我们不会为您做作业。但是,我们可以帮助您完成您的作业,但为此您需要指定一个您无法解决且需要帮助的问题。问题示例:“如何实现系统调用?”、“如何列出进程”、“我的代码列出了进程,但这样做太慢了”。

标签: c linux-kernel


【解决方案1】:

由于我对此无能为力,所以让我给你一些提示:

查看 include/linux/sched.h 中的 task_struct 数据类型可以得到每个进程的大部分信息。 “current”也是task_struct类型的指针,可以从task_struct中提取一些有用的信息。例如:

  • current->pid 给你进程的ID
  • current->parent给你进程的parent;parent也是task_struct类型的指针
  • current->comm 给你进程的名字,作为一个字符数组
  • current->children 给你一个进程的子进程列表。它是一个 list_head 数据类型,实现为双链表。您需要找到另一种方法来访问此数据类型。尝试在scripts/kconfig/list.h中查找

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2017-08-09
    • 2023-03-03
    • 1970-01-01
    • 2017-05-23
    • 2017-07-22
    相关资源
    最近更新 更多