2013-09-06 50 views
8

Tôi muốn lấy tên quy trình đầy đủ từ struct task_struct. Trường comm chỉ lưu trữ 16 ký tự, trong khi tên quy trình có thể dài hơn. Có cách nào để có được tên quy trình đầy đủ không?
Điều này có thể được thực hiện thông qua việc nhận struct vm_area_struct từ task_struct và tiếp tục nhận tệp mà vm_area được ánh xạ, nhưng điều này không đáng tin cậy.Tên quy trình đầy đủ từ task_struct

+0

Nó không đáng tin cậy? Đó chính là điều mà hệ tập tin proc thực hiện để trả về một đường dẫn trong '/ proc//exe'. Tìm kiếm mã nguồn kernel cho 'proc_exe_link'. – craig65535

Trả lời

11

Ý của bạn là tên tệp exe? Bạn có thể nhận được exe của quá trình hiện tại như sau:

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); 
} 
Các vấn đề liên quan