c-一个系统调用,用于转储有关多线程程序中所有系统进程和线程的信息



如何在linux中进行系统调用(我使用的是ubuntu)来转储系统中所有进程以及多线程程序中线程的信息?非常感谢你的帮助。

第一步是实现一个系统调用来列出进程。

内核将进程列表存储在一个名为task list的循环双链接列表中。任务列表中的每个元素都是在<linux/sched.h>中定义的类型为struct task_struct的进程描述符。进程描述符包含有关特定进程的所有信息。

task_struct结构包含内核拥有和需要的关于进程的所有信息。进程描述符包含描述执行程序打开文件、进程地址空间、挂起信号、进程状态等的数据。

#include <linux/kernel.h>
#include <linux/printk.h>
#include <linux/sched.h>
asmlinkage long sys_proclist(void*)
{
    struct task_struct *task;
    for_each_process(task) {
        /* this prints the name and PID of each task */
        printk("%s[%d]n", task->comm, task->pid);
    }
    return 0;
}

for_each_process(task)在整个任务列表上进行迭代。在每次迭代中,task都指向列表中的下一个任务。

一旦在proclist.c文件中实现了系统调用,现在,您必须将此系统调用添加到内核源代码中,重新编译内核,安装并重新启动以在用户空间中使用它。

编译内核:在编译之前先读一读(按照教程),如果出现任何问题,都会破坏系统。

注意:任何教程中提供的文件路径和文件名可能因内核版本而异,因此请小心。

最新更新