put_pid函数功能描述:此函数用于释放进程所占用的Cache空间,但不是每次执行总是成功的,因为只有在进程的用户数量减为1时,即目前没有任何其他任务在使用此进程时,才可以释放此进程所占用的Cache空间;当进程用户的数量大于1时,此函数会减小进程描述符字段count的值,使其减小1。
put_pid文件包含
#include <linux/pid.h>
put_pid函数定义
在内核源码中的位置:linux-3.19.3/kernel/pid.c
函数定义格式:
void put_pid(struct pid *pid)
put_pid输入参数说明
参数pid是struct pid类型的指针变量,保存进程描述符信息,其定义及详细解释请参考find_get_pid( )。
put_pid返回参数说明
此函数的返回值为void类型,即不返回任何值。
put_pid实例解析
编写测试文件: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查看内核输出信息,会出现如图所示的结果。
结果分析:
由上图可以看到在函数put_pid( )执行之前进程描述符字段count的值为3,在函数put_pid( )执行之后进程描述符字段count的值减为2,说明函数put_pid( )能够减少进程描述符字段count的值,此时进程的用户数量为2。