2013-09-06 14 views
8

Chcę uzyskać pełną nazwę procesu od struct task_struct. Pole comm przechowuje tylko 16 znaków, a nazwa procesu może być dłuższa. Czy istnieje sposób na uzyskanie pełnej nazwy procesu?
Można to zrobić poprzez uzyskanie struct vm_area_struct z task_struct, a następnie uzyskać plik, do którego vm_area jest mapowany, ale jest to niewiarygodne.Pełna nazwa procesu z task_struct

+0

Czy to niewiarygodne? Dokładnie to robi system plików proc, aby zwrócić ścieżkę w '/ proc//exe'. Wyszukaj źródło kernela dla 'proc_exe_link'. – craig65535

Odpowiedz

11

Czy chodziło Ci o nazwę pliku exe? Możesz pobrać przykład bieżącego procesu w następujący sposób:

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