当前位置: 首页 > news >正文

内核编程十二:打印task_struct中的数据

在Linux内核中,current 是一个宏,用于获取当前正在执行的进程的 task_struct 结构体指针。current 宏返回一个指向当前正在运行的进程的 task_struct 结构体的指针。通过这个指针,内核代码可以访问和修改当前进程的各种属性和状态。

打印单个进程信息

通过current 打印当前 CPU 上正在运行的进程的相关信息:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>	/* current() */
#include <linux/preempt.h>	/* in_task() */
#include <linux/cred.h>		/* current_{e}{u,g}id() */
#include <linux/uidgid.h>	/* {from,make}_kuid() */MODULE_AUTHOR("<insert your name here>");
MODULE_DESCRIPTION("print process desc");
MODULE_LICENSE("Dual MIT/GPL");
MODULE_VERSION("0.1");static int __init print_process(void)
{struct task_struct *current_task = current;printk(KERN_INFO "Current process: %s (pid: %d)\n", current_task->comm, current_task->pid);printk(KERN_INFO "Current process prio: %d\n", current_task->prio);printk(KERN_INFO "Current process on_cpu: %d\n", current_task->on_cpu);printk(KERN_INFO "Current process recent_used_cpu: %d\n", current_task->recent_used_cpu);printk(KERN_INFO "Current process wake_cpu: %d\n", current_task->wake_cpu);printk(KERN_INFO "Current process static_prio: %d\n", current_task->static_prio);printk(KERN_INFO "Current process numa_scan_seq: %d\n", current_task->numa_scan_seq);printk(KERN_INFO "Current process exit_code: %d\n", current_task->exit_code);printk(KERN_INFO "Current process exit_state: %d\n", current_task->exit_state);return 0;		/* success */
}static void __exit print_process_exit(void)
{printk(KERN_INFO "Goodbye, world\n");
}module_init(print_process);
module_exit(print_process_exit);

遍历进程

通过 init_tasktask_struct 头节点)遍历所有进程:

struct task_struct *task;
for_each_process(task) {printk(KERN_INFO "Process: %s (PID: %d)\n", task->comm, task->pid);
}

#include <linux/sched/signal.h>  // 提供 for_each_process 和相关进程遍历宏 

current 宏是 Linux 内核中一个非常重要的工具,它使得内核代码能够方便地访问和操作当前进程的信息。理解 current 宏的实现和使用方式对于深入理解 Linux 内核的工作原理非常有帮助。


http://www.mrgr.cn/news/95843.html

相关文章:

  • 单片机和微控制器知识汇总——《器件手册--单片机、数字信号处理器和可编程逻辑器件》
  • Mycat安装验证流程整理
  • 【Pandas】pandas Series to_csv
  • Vue 3 组件高级语法
  • 【c++入门系列】:引用以及内联函数详解
  • 【Golang】补充:占位符、转义字符、错误处理
  • Cucumber 专题系列 - 第三篇:编写第一个 Feature 文件
  • 轮回的起点与终点:一场跨越时空的哲学对话
  • 程序化广告行业(33/89):深入了解OTT、OTV及多样广告形式
  • 【精心整理】2025 DeepSeek 精品学习资料合集-共50份(教程+原理解读+行业应用+技术实践).zip
  • 36.评论日记
  • 【工程记录】QwQ-32b 8bit量化部署教程(vLLM | 缓解复读)
  • LVS的 NAT 模式实验
  • 性能测试笔记
  • Rust从入门到精通之精通篇:26.性能优化技术
  • VUE3项目VITE打包优化
  • UART转APB模块ModelSim仿真
  • deepseek实战教程-第六篇查找源码之仓库地址与deepseek-R1、deepseek-LLM仓库内容查看
  • 详解接口的常见请求方式
  • Nginx反向代理及负载均衡