Linux内核API find_vpid

find_vpid函数功能描述:此函数根据提供的局部进程号获取对应的进程描述符。

find_vpid文件包含

#include <linux/pid.h>

find_vpid函数定义

在内核源码中的位置:linux-3.19.3/kernel/pid.c

函数定义格式:

struct pid *find_vpid(int nr)

find_vpid输入参数说明

参数nr是int型变量,是进程对应的局部进程号,一般与进程号相同。

find_vpid返回参数说明

此函数的返回结果是struct pid结构体类型的指针变量,保存与参数提供的进程号对应的进程描述符信息,其定义及详细解释请参考函数find_get_pid( )分析文档的返回参数说明部分。

find_vpid实例解析

编写测试文件:find_vpid.c

头文件引用:

#include <linux/module.h>
#include <linux/sched.h>
#include <linux/pid.h>
MODULE_LICENSE("GPL");

模块加载函数定义:

static int __init find_vpid_init(void)
{
    printk("into find_vpid_init.\n");
    struct pid *vpid =find_vpid(current->pid); //执行函数find_vpid( )获取当前进程描述符

    // 显示进程描述符信息
    printk("the count of the pid is :%d\n", vpid->count);
    printk("the level of the pid is :%d\n", vpid->level);

    // 显示子进程的进程号
    printk("the pid of the find_vpid is :%d\n", vpid->numbers[vpid->level].nr);

    // 显示当前进程的进程号
    printk("the pid of current thread is :%d\n", current->pid);
    printk("out find_vpid_init.\n");
    return 0;
}

模块退出函数定义:

static void __exit find_vpid_exit(void)
{
    printk("Goodbye   find_vpid\n");
}

模块加载和退出函数调用:

module_init(find_vpid_init);
module_exit(find_vpid_exit);

实例运行结果及分析:

首先编译模块,执行命令insmod find_vpid.ko插入模块,然后执行命令dmesg -c查看内核输出信息,会出现如图所示的结果。

Linux内核API find_vpid

结果分析:

上图中首先利用函数find_vpid( )获取当前进程的进程描述符信息,函数find_vpid ( )执行之后,进程描述符的字段count的值为2, find_vpid( )不会增加进程count字段的值。而在函数find_get_pid( )执行之后,进程描述符的字段count的值为3, find_get_pid( )会增加进程count字段的值,这是函数find_get_pid( )与函数f ind_vpid( )执行结果的唯一不同之处。

赞(1)
未经允许不得转载:极客笔记 » Linux内核API find_vpid
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址