我正在尝试访问pid命名空间的inode编号,可以使用ls -Li /proc/<pid>/ns/mnt
或/proc/<pid>/ns/pid
查看。
我是内核代码的新手,想知道在内核中,从current
任务结构中我如何获得这个值?一些代码确实会有所帮助。
可以在当前任务结构中查找pid_namespace
结构,该结构具有以下字段proc_inum
:
task_active_pid_ns(current)->proc_inum;
编辑:从内核3.19版本开始,pid_namespace
结构体收到了一个更新,其中包括添加头文件中定义的ns_common
结构体:/include/linux/ns_common.h
。
ns_common
结构体定义如下:
struct ns_common {
atomic_long_t stashed;
const struct proc_ns_operations *ops;
unsigned int inum;
};
新的pid_namespace
结构体被定义为包括ns_common
结构体,并且不包含proc_inum
整数。相反,可以使用ns_common
结构访问索引节点编号。
因此,inode编号可以通过以下行获得(从内核v3.19开始):task_active_pid_ns(current)->ns_common->inum
来源:https://elixir.bootlin.com/linux/v3.19/source/include/linux/pid_namespace.h