[英]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.