我有一个关于在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,当前进程或进程与PIDparent_proc,,第一个processoldest_child_proc,的父进程,第一个进程的最大子进程
进程的信息存储在struct proc_info中,并包含:
pid,processname,的pid,执行的程序名
我们的系统调用的原型描述如下:
要调用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
}提示:
查找当前进程的include/linux/sched.h.
arch/x86/include/asm/current.h或简单使用宏电流(当前-> pid)。
arch/x86/include/asm/current.h进程,构建内核的时间缩短到10分钟左右,但要编译很长时间。为了尽快开发系统调用,可以使用内核模块来测试预先表示为模块的系统调用(Appd B)。如何实现这一系统调用?
发布于 2021-09-06 09:36:19
既然我在这方面帮不了你多少忙,让我给你一些提示:
查看task_struct数据类型时,您可以获得每个进程的大部分信息。"current“也是task_struct类型的指针,您可以从task_struct中提取一些有用的信息。例如:
process
中找到
https://stackoverflow.com/questions/58521628
复制相似问题