linux在内核中从pid获取进程名称

您好我已经使用从内核sys_getpid()获取进程ID如何从内核结构中找出进程名? 它存在于内核?

非常感谢

Solutions Collecting From Web of "linux在内核中从pid获取进程名称"

struct task_struct包含一个名为comm的成员,它包含executable name excluding path

从这个文件中获取当前的宏会得到启动当前进程的程序的名称(如insmod / modprobe)。

使用上面的信息,你可以使用获取名称信息。

我的内核模块加载“modprobe -v my_module –allow-unsupported -o some-data”,并提取“some-data”参数。 下面的代码给了我整个命令行,这里是我如何解析感兴趣的参数:

 struct mm_struct *mm; unsigned char x, cmdlen; mm = get_task_mm(current); down_read(&mm->mmap_sem); cmdlen = mm->arg_end - mm->arg_start; for(x=0; x<cmdlen; x++) { if(*(unsigned char *)(mm->arg_start + x) == '-' && *(unsigned char *)(mm->arg_start + (x+1)) == 'o') { break; } } up_read(&mm->mmap_sem); if(x == cmdlen) { printk(KERN_ERR "inject: ERROR - no target specified\n"); return -EINVAL; } strcpy(target,(unsigned char *)(mm->arg_start + (x+3))); 

“target”包含-o参数后面的字符串。 你可以稍微压缩一下 – 调用者(在这种情况下,modprobe)将是mm-> arg_start中的第一个字符串,以满足你的需求。

不知道,但find_task_by_pid_ns可能是有用的。

你可以看看/proc/<pid>/

例如, /proc/<pid>/exe是指向实际二进制文件的符号链接。

/proc/<pid>/cmdline是命令行的空分隔列表,所以第一个词是进程名称。