我正在一个内核模块中,想要从给定的 pid 中获得整个进程名称。具体来说:我想要 /proc/PID/cmdline 中的那一行。
问题是 task_struct->comm[] 只有 15 个字节长,不能处理程序手动更改他的 argv[] 或通过 setproctitle(3) 更改的情况...
有任何想法? :)
我正在一个内核模块中,想要从给定的 pid 中获得整个进程名称。具体来说:我想要 /proc/PID/cmdline 中的那一行。
问题是 task_struct->comm[] 只有 15 个字节长,不能处理程序手动更改他的 argv[] 或通过 setproctitle(3) 更改的情况...
有任何想法? :)
proc_pid_cmdline(struct task_struct *task, char * buffer)
这个过程相对简单,一旦你获得了需要关注的进程的task_struct
,你就可以使用access_process_vm()
从mm->arg_start
中提取你想要的部分。
/proc/<pid>/cmdline
文件并读取其中的内容有什么问题吗?这个文件包含进程的命令行参数。
'\0'
,这是argv[0]
的结尾 - 每个元素都由'\0'
分隔。 - caf