linux进程描述符怎么得
linux进程描述符怎么得详细介绍
在 Linux 系统里,进程描述符是一个task_struct结构体,它存有进程的所有信息。下面为你介绍几种获取进程描述符的方法:
1. 在内核代码中获取当前进程描述符
在内核代码里,你可以借助current宏来获取当前正在执行的进程的描述符。示例代码如下:
c
__init
current_task current
KERN_INFO current_taskcomm current_taskpid
__exit
KERN_INFO
my_module_init
my_module_exit
在这个示例中,current宏返回当前进程的task_struct指针,接着打印出进程的名称和 PID。
2. 通过 PID 查找进程描述符
要是你知道进程的 PID,就可以使用find_task_by_pid_ns函数来查找对应的进程描述符。示例代码如下:
c
__init
target_pid
task target_pid init_pid_ns
task
KERN_INFO taskcomm taskpid
KERN_INFO target_pid
__exit
KERN_INFO
my_module_init
my_module_exit
在这个示例中,find_task_by_pid_ns函数会在初始化命名空间中查找指定 PID 的进程描述符。
3. 遍历所有进程描述符
你还能通过遍历task_struct链表来获取系统中所有进程的描述符。示例代码如下:
c
__init
task
task
KERN_INFO taskcomm taskpid
__exit
KERN_INFO
my_module_init
my_module_exit
在这个示例中,for_each_process宏会遍历系统中的所有进程描述符,并打印出每个进程的名称和 PID。
这些示例代码都是内核模块代码,你需要把它们保存为.c文件,然后使用Makefile来编译和加载模块。
编写 Makefile
makefile
obj-m my_module.omake -C /lib/modules/ uname -r/build MPWD modules
make -C /lib/modules/ uname -r/build MPWD clean
912345678obj-m += my_module.o
all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
把上述代码保存为Makefile,和.c文件放在同一目录下,然后在终端运行make命令来编译模块。编译完成后,使用insmod命令加载模块,使用rmmod命令卸载模块。