首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取进程信息(当前proc、父proc、最大子proc)

获取进程信息(当前proc、父proc、最大子proc)
EN

Stack Overflow用户
提问于 2019-10-23 11:16:33
回答 1查看 480关注 0票数 1

我有一个关于在Linux内核中添加系统调用的练习,但是我很难实现它。以下是说明:

此分配的主要部分是实现一个新的系统调用,该调用允许用户确定有关父进程和最老子进程的信息。有关进程信息的信息通过以下结构表示:

代码语言:javascript
复制
struct procinfos{
    long studentID;
    struct proc_info proc;
    struct proc_info parent_proc;
    struct proc_info oldest_child_proc;
};

其中proc_info的定义如下:

代码语言:javascript
复制
struct proc_info{
    pid_t pid;
    char name[16];
};

procinfos包含三个进程的信息:

  • proc,当前进程或进程与PID
  • parent_proc,,第一个process
  • oldest_child_proc,的父进程,第一个进程

的最大子进程

进程的信息存储在struct proc_info中,并包含:

  • pid,process
  • name,的pid,执行

的程序名

我们的系统调用的原型描述如下:

要调用get_proc_info系统调用,用户必须在当前进程的情况下提供进程的PID或−1。如果系统调用找到具有给定PID的进程,它将获取进程的信息,将其放入输出参数*info中,并返回0。但是,如果系统调用找不到这样的进程,它将返回EINVAL

代码语言:javascript
复制
#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.

  • To

  • :查看arch/x86/include/asm/current.h或简单使用宏电流(当前-> pid)。

  • 查找每个进程的信息,查看修改后的arch/x86/include/asm/current.h进程,构建内核的时间缩短到10分钟左右,但要编译很长时间。为了尽快开发系统调用,可以使用内核模块来测试预先表示为模块的系统调用(Appd B)。

如何实现这一系统调用?

EN

回答 1

Stack Overflow用户

发布于 2021-09-06 09:36:19

既然我在这方面帮不了你多少忙,让我给你一些提示:

查看task_struct数据类型时,您可以获得每个进程的大部分信息。"current“也是task_struct类型的指针,您可以从task_struct中提取一些有用的信息。例如:

process

  • current->parent的ID给出了进程的父进程;父进程也是task_struct的指针,type

  • current->comm给出了进程的名称,而char array

  • current->children给出了进程的子进程列表。它是一个list_head数据类型,实现为一个双链接列表。您需要找到另一种方法来访问此数据类型。尝试在scripts/kconfig/list.h

中找到

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58521628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档