2013-09-06 3 views
8

Я хочу получить полное имя процесса от struct task_struct. Поле comm хранит только 16 символов, а имя процесса может быть больше. Есть ли способ получить полное имя процесса?
Это можно сделать, получив struct vm_area_struct от task_struct и дополнительно получить файл, на который сопоставляется vm_area, но это ненадежно.Полное имя процесса от task_struct

+0

Неверно ли это быть? Это то, что делает файловая система proc, чтобы вернуть путь в '/ proc//exe'. Найдите исходный код ядра 'proc_exe_link'. – craig65535

ответ

11

Возможно, вы имели в виду exe file name? Вы можете получить 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); 
} 
Смежные вопросы