簡體   English   中英

linux從內核中的pid獲取進程名稱

[英]linux get process name from pid within kernel

嗨,我已經在內核中使用sys_getpid()來獲取進程ID,如何從內核struct中找出進程名稱? 它存在於內核中嗎?

非常感謝

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)));

“目標”將字符串保留在-o參數后面。 您可以對其進行某種程度的壓縮-調用程序(在本例中為modprobe)將成為mm-> arg_start中的第一個字符串-以適應您的需求。

不確定,但是find_task_by_pid_ns可能有用。

您可以在/proc/<pid>/查看特殊文件

例如, /proc/<pid>/exe是指向實際二進制文件的符號鏈接。

/proc/<pid>/cmdline是命令行的空分隔列表,因此第一個單詞是進程名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM