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

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

ind_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) modules
clean:
  make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PAHT) cleals
make
sudo insmod pidtest.ko
dmesg -c
目录
打赏
0
1
1
0
32
分享
相关文章
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
281 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
137 13
|
5月前
|
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
163 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
199 2
linux笔记 diff及patch的制作与使用
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
【收藏】内核级利用通用Hook函数方法检测进程
【收藏】内核级利用通用Hook函数方法检测进程
【linux】PetaLinux 2024.1安装笔记
【linux】PetaLinux 2024.1安装笔记
479 0
|
10天前
|
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
32 5
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
243 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等