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

3.12 函数:put_pid( )

文件包含:

        #include <linux/pid.h>

函数定义:

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

函数定义格式:void put_pid(struct pid *pid)

函数功能描述:

此函数用于释放进程所占用的Cache空间,但不是每次执行总是成功的,因为只有在进程的用户数量减为1时,即目前没有任何其他任务在使用此进程时,才可以释放此进程所占用的Cache空间;当进程用户的数量大于1时,此函数会减小进程描述符字段count的值,使其减小1。

输入参数说明:

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

返回参数说明:

此函数的返回值为void类型,即不返回任何值。

实例解析:

编写测试文件:put_pid.c

头文件引用:

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

模块加载函数定义:

        static int __init put_pid_init(void)
        {
            printk("into put_pid_init.\n");
            struct pid * kpid=find_get_pid(current->pid);              //获取当前进程描述符
            printk("the count of the pid is :%d\n", kpid->count);       //显示目前进程的用户量
            printk("the level of the pid is :%d\n", kpid->level);       //显示进程的level值

            // 显示进程的PID值
            printk("the pid of the find_get_pid is :%d\n", kpid->numbers[kpid->level].nr);
            put_pid(kpid);                                                  //调用函数释放进程
            printk("the new value after the function put_pid:\n");
            printk("the new count of the pid is:%d\n", kpid->count); //显示函数调用之后count的值
            printk("the new level of the pid is:%d\n", kpid->level); //显示函数调用之后level的值

            // 显示进程的PID值
            printk("the new pid of the thread is:%d\n", kpid->numbers[kpid->level].nr);
            //显示函数kernel_thread( )函数的返回值
            printk("the pid of current thread is :%d\n", current->pid);
            printk("out put_pid_init.\n");
            return 0;
        }

模块退出函数定义:

        static void __exit put_pid_exit(void)
        {
            printk("Goodbye put_pid\n");
        }

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

        module_init(put_pid_init);
        module_exit(put_pid_exit);

实例运行结果及分析:

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

图3-12 插入put_pid模块系统输出信息

结果分析:

由图3-12可以看到在函数put_pid( )执行之前进程描述符字段count的值为3,在函数put_pid( )执行之后进程描述符字段count的值减为2,说明函数put_pid( )能够减少进程描述符字段count的值,此时进程的用户数量为2。