Linux内核API完全参考手册(第2版)
上QQ阅读APP看书,第一时间看更新

3.5 函数:get_pid( )

文件包含:

        #include <linux/pid.h>

函数定义:

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

函数定义格式:

        static inline struct pid *get_pid(struct pid *pid)
        {
            if (pid)
                atomic_inc(&pid->count);
            return pid;
        }

函数功能描述:

此函数用于改变进程描述符的count字段的值,使count字段的值增加1,此进程描述符是函数的输入参数。

输入参数说明:

参数pid是struct pid结构体类型的指针,保存进程的描述符信息,与函数的返回结果类型相同,其定义及详细解释请读者自行参考本章函数f ind_get_pid( )分析文档的返回参数说明部分。

返回参数说明:

此函数的返回结果同输入参数相同,保存进程的描述符信息,具体定义及详细解释请读者自行参考函数f ind_get_pid( )分析文档的返回参数说明部分。

实例解析:

编写测试文件:get_pid.c

头文件引用:

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

模块加载函数定义:

        static int __init get_pid_init(void)
        {
            printk("into get_pid_init.\n");
            struct pid * mypid=find_get_pid(current->pid);       //获取当前进程的描述符

            //显示函数find_get_pid( )返回的进程描述符的信息
            printk("the count of mypid is :%d\n", mypid->count);
            printk("the level of mypid is :%d\n", mypid->level);
            struct pid * mypid1 = get_pid(mypid);                //获取当前进程描述符

            //显示函数get_pid( )返回的进程描述符的信息
            printk("the count of mypid1 is %d\n", mypid1->count);
            printk("the level of mypid1 is %d\n", mypid1->level);
            printk("out get_pid_init.\n");
            return 0;
        }

模块退出函数定义:

        static void __exit get_pid_exit(void)
        {
                    printk("Goodbye   get_pid\n");
        }

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

        module_init(get_pid_init);
        module_exit(get_pid_exit);

实例运行结果及分析:

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

图3-5 插入get_pid模块系统输出信息

结果分析:

图3-5说明在函数get_pid( )执行之后进程描述符的count字段的值增加了1,由3变为4,验证了函数get_pid( )的作用。