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

Linux源码阅读笔记07-进程管理4大常用API函数

find_get_pid

find_get_pid(...)函数功能:根据进程编号获取对应的进程描述符,具体Linux内核源码对应函数设计如下:

获取进程描述符,且描述符的count+1,表示进程多一个用户

pid_task

pid_task(...)函数功能:获取任务的任务描述符数据信息,具体Linux内核源码对应函数设计如下:


pid_nr

pid_nr(...)函数功能:获取进程的全局进程号,具体Linux内核源码对应的函数设计如下:

__task_pid_nr_ns

__task_pid_nr_ns(...)函数功能:获取进程编号,具体Linux内核源码对应函数设计如下:

实验代码


#include <linux/sched.h>
#include <linux/pid.h>
#include <linux/module.h>
static int __init pidtest_initfunc(void)
{printk("调用 pidtest_initfunc(...)函数.\n");// 1 : find_get_pid(...)struct pid *kernelpid=find_get_pid(current->pid);printk("打印进程描述符 count 的值: %d\n",kernelpid->count);printk("打印进程描述符 level 的值: %d\n",kernelpid->level);printk("打印进程描述符 nnumbers 的值:%d\n",kernelpid->numbers[kernelpid->level].nr);// 2 : pid_nr(..)int iNr=pid_nr(kernelpid);printk("打印进程描述符的全局进程编号为:%d\n",iNr);printk("打印进程描述符的当前线程组编号为:%d\n",current->tgid);// 3 : pid_task(...)struct task_struct *ttask=pid_task(kernelpid,PIDTYPE_PID);printk("打印任务当前的状态为: %ld\n",ttask->stats);printk("打印任务当前的进程号为:%d\n",ttask->pid);// 4 : __task_pid_nr_ns(...)pid_t rest=__task_pid_nr_ns(ttask,PIDTYPE_PID,kernelpid->numbers[kernelpid->level].ns);printk("调用__task_pid_nr_ns(...)函数,输出结果为:%d\n",rest);printk("退出 pidtest_initfunc(...)函数.\n");return 0;
}
static void __exit pidtest_exitfunc(void)
{printk("正常退出 Linux 内核......\n");
}
MODULE_LICENSE("GPL");
module_init(pidtest_initfunc);
module_exit(pidtest_exitfunc);
obj-m:=pidtest.o	CURRENT_PAHT:=$(shell pwd) 
LINUX_KERNEL:=$(shell uname -r)   LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
all:make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PAHT) modulesclean:make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PAHT) cleals
make
sudo insmod pidtest.ko
dmesg -c

推荐课程:https://xxetb.xetslk.com/s/3oyV5o

相关文章:

Linux源码阅读笔记07-进程管理4大常用API函数

find_get_pid find_get_pid(...)函数功能&#xff1a;根据进程编号获取对应的进程描述符&#xff0c;具体Linux内核源码对应函数设计如下&#xff1a; 获取进程描述符&#xff0c;且描述符的count1&#xff0c;表示进程多一个用户 pid_task pid_task(...)函数功能&#xff1…...

后端之路第三站(Mybatis)——JDBC跟Mybatis、lombok

一、什么是JDBC JDBC就是sun公司研发的一套通过java来操控数据库的工具&#xff0c;对应不同的数据库系统有不同的JDBC&#xff0c;而他们统称【驱动】&#xff0c;这就是上一篇我们提到创建Mybatis项目时要引入的依赖、以及连接数据库四要素里的第一要素。 JDBC有自己一套原始…...

零基础入门怎么学习老挝语字母表?《老挝语翻译通》App真人发音教学,学习老挝语字母发音和词汇句子!

这段老挝文字翻译成中文是什么意思&#xff1f;有什么好用的老挝语翻译工具推荐吗&#xff1f; 快速翻译&#xff1a;中老语言无缝转换&#xff0c;实时翻译&#xff0c;让沟通更流畅。 学习工具&#xff1a;零基础入门到流利对话&#xff0c;老挝语真人发音&#xff0c;让你的…...

linux深度deepin基于rsync和apt-mirror同步软件源及构建本地内网源

目录 一、rsync方式二、apt-mirror方式1.安装apt-mirror2.配置apt-mirror(/etc/apt/mirror.list)3.新建存放目录开始下载 3.发布mirror站点 一、rsync方式 参考官方文档地址&#xff1a; https://www.deepin.org/index/docs/wiki/05_HOW-TO/08_%E9%95%9C%E5%83%8F%E5%8A%A0%E9%…...

场景管理分析平台介绍

在数字化浪潮的推动下&#xff0c;数据已成为企业决策的重要依据。特别是在智能驾驶、虚拟现实和物联网等领域&#xff0c;场景数据的高效管理和利用至关重要。在智能驾驶领域面对海量的场景数据&#xff0c;如何高效处理、精准分析&#xff0c;并将其转化为有价值的决策支持&a…...

SQL Server和Oracle数据库的实时同步

数据同步在大数据应用中扮演着关键角色&#xff0c;它确保了数据的实时性和一致性&#xff0c;为数据分析和决策提供了重要支持。常见的数据同步方式包括ETL实时同步和实时ETL工具&#xff0c;后者可以基于日志追踪或触发器进行分类。不同的数据库系统针对实时同步也有各自的实…...

Python中使用Oracle向量数据库实现文本检索系统

Python中使用Oracle向量数据库实现文本检索系统 代码分析 在本文中,我们将深入分析一个使用Oracle向量数据库实现文本检索系统的Python代码,并基于相同的技术生成一个新的示例。这个系统允许我们存储文档及其嵌入向量,并执行相似性搜索。 代码分析 让我们逐步分析原始代码的主…...

java考试题20道

选择题 编译Java源代码文件的命令是javac javac命令是将Java源代码文件进行编译得到字节码文件(.class文件) java命令是在JVM上运行得到的字节码文件 下面是一个示例&#xff1a; javac test.java -------> test.class java test ------> 运行test.class文件下列那…...

云仓的优势体现在哪里?

云仓&#xff0c;即云仓储&#xff0c;是一种基于互联网和大数据技术的新型仓储管理模式。它通过高度的信息化、自动化和集成化管理模式&#xff0c;为企业提供高效、灵活、智能的仓储解决方案。云仓的优势主要体现在以下几个方面&#xff1a; ———————————————…...

github 设置中文,亲测有效

点进去 安装 选上面第二个&#xff0c;不行再选第一个 GitHub - maboloshi/github-chinese: GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese)...

Spring容器生命周期中如前置运行程序和后置运行程序

在Spring容器加入一个实现了BeanPostProcessor接口bean实例&#xff0c;重写postProcessBeforeInitialization、postProcessAfterInitialization方法&#xff0c;在方法里面写具体的实现&#xff0c;从而达到Spring容器在初如化前或销毁时执行预定的程序&#xff0c;方法如下&a…...

C++ 现代教程二

线程支持库 - C中文 - API参考文档 GitHub - microsoft/GSL: Guidelines Support Library Fluent C&#xff1a;奇异递归模板模式&#xff08;CRTP&#xff09; - 简书 #include <thread> #include <iostream> #include <unordered_map> #include <futu…...

JavaScript函数闭包解析

一、什么是闭包 JavaScript中的函数闭包是指函数可以访问其父级作用域中的变量&#xff0c;即使函数在父级作用域外被调用。闭包可以获取和修改其父级作用域中的变量&#xff0c;即使父级作用域已经被销毁。 在JavaScript中&#xff0c;当一个函数被定义时&#xff0c;它会创…...

STM32MP135裸机编程:使用软件触发硬件复位

0 参考资料 STM32MP13xx参考手册.pdf 1 使用寄存器实现软件复位 1.1 复位电路概述 重点关注下面标红的路线&#xff1a; 通过这条路线可以清楚看到&#xff0c;我们可以通过设置RCC_MP_GRSTCSETR寄存器让RPCTL&#xff08;复位脉冲控制器&#xff09;给NRST&#xff08;硬件复…...

【饼图交通方式】用ECharts的graphic配置打造个性化

利用ECharts的graphic配置打造个性化图表 内容概要 ECharts是一款强大的数据可视化工具&#xff0c;它提供了丰富的配置选项来定制图表。本文将重点介绍graphic配置的使用&#xff0c;展示如何通过在饼图中添加个性化的图形元素&#xff0c;例如中心图像&#xff0c;来增强图…...

大模型学习笔记3【大模型】LLaMA学习笔记

文章目录 学习内容LLaMALLaMA模型结构LLaMA下载和使用好用的开源项目[Chinese-Alpaca](https://github.com/ymcui/Chinese-LLaMA-Alpaca)Chinese-Alpaca使用量化评估 学习内容 完整学习LLaMA LLaMA 2023年2月&#xff0c;由FaceBook公开了LLaMA&#xff0c;包含7B&#xff0…...

工程师 - 什么是SMP

什么是 SMP&#xff08;对称多处理&#xff09;&#xff1f; What is SMP (symmetric multiprocessing)? 对称多处理&#xff08;SMP&#xff0c;symmetric multiprocessing&#xff09;是由多个处理器完成的计算机处理过程&#xff0c;这些处理器共享一个操作系统&#xff0…...

Webpack: 并行构建

概述 受限于 Node.js 的单线程架构&#xff0c;原生 Webpack 对所有资源文件做的所有解析、转译、合并操作本质上都是在同一个线程内串行执行&#xff0c;CPU 利用率极低&#xff0c;因此&#xff0c;理所当然地&#xff0c;社区出现了一些以多进程方式运行 Webpack&#xff0…...

Vue的介绍与使用

1.Vue的介绍 内容讲解 【1】Vue介绍 1.vue属于一个前端框架&#xff0c;底层使用原生js编写的。主要用来进行前端和后台服务器之间的一个交互。 2.Vue是一套构建用户界面的渐进式前端框架。 “渐进式框架”简单的来说你可以将Vue作为你的应用一部分嵌入其中&#xff0c;代理…...

MYSQL双主双从,使用Keepalived双机热备+LVS高可用群集

MYSQL双主双从&#xff0c;使用Keepalived双机热备LVS高可用群集 ​ 文档只记录KeepalivedLVSmysql主从&#xff0c;不包含检验&#xff0c;如需检验&#xff0c;请自行添加web服务器 一、IP规划 服务器IP备注master1192.168.100.131master2的从master2192.168.100.132maste…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...