来自task_struct的完整进程名称

问题描述 投票:0回答:3

我想从

struct task_struct
获取完整的进程名称。
comm
字段仅存储16个字符,而进程名称可以更长。有没有办法获得完整的进程名称?
可以通过从
struct vm_area_struct
中获取
task_struct
,并进一步获取vm_area映射到的文件来完成,但这是不可靠的。

linux process kernel
3个回答
14
投票

您是指exe文件名吗?您可以按如下方式获取当前进程的exe:

char *pathname,*p;
mm = current->mm;
if (mm) {
    down_read(&mm->mmap_sem);
    if (mm->exe_file) {
                pathname = kmalloc(PATH_MAX, GFP_ATOMIC);
                if (pathname) {
                      p = d_path(&mm->exe_file->f_path, pathname, PATH_MAX);
                    /*Now you have the path name of exe in p*/
                }
            }
    up_read(&mm->mmap_sem);
}

0
投票

current->nameidata->filename->name
也应该有效。


-3
投票

只需使用

current->comm
即可看到名称。

示例:

printk(KERN_ALERT "THREAD NAME = %s\n", current->comm);
© www.soinside.com 2019 - 2024. All rights reserved.