2012-08-11 166 views

回答

15

當您的讀取函數正在執行時,它在發出系統調用的進程的上下文中這樣做。因此您應該可以使用current,即current->pid

+0

什麼是當前?讀取沒有得到當前的參數... ssize_t(* read)(struct file *,char __user *,size_t,loff_t *); – 0x90 2012-08-11 15:30:01

+2

@ 0x90這是一個宏。 – cnicutar 2012-08-11 15:41:13

+0

http://kernelnewbies.org/FAQ/current,對嗎? – 0x90 2012-08-11 15:54:35

7

現在,我們在sched.h中定義了一些輔助函數。在pid的情況下,您可以使用:

pid = task_pid_nr(current); 

獲取當前任務的pid。

這裏是從v3.8開始的include/linux/sched.h的評論。

傭工來獲得任務的不同PID,因爲他們看到來自不同的命名空間

  • task_xid_nr():全球ID,即從初始化命名空間中看到的ID;
  • task_xid_vnr():虛擬ID,即從當前的pid命名空間中看到的id。
  • task_xid_nr_ns():從指定的ns中看到的id;
  • set_task_vxid():爲任務分配一個虛擬ID;

又見pid_nr()等,在在include/linux/pid.h

2

在內核2.6.39手臂的身材,如果current->pid不工作,那麼它可以這樣做:

pid_nr(get_task_pid(current, PIDTYPE_PID)) 

PIDTYPE_PID可以用PIDTYPE_PGIDPIDTYPE_SID代替。頭文源是在include/linux/pid.h作爲靖志指出。

哪種方法的工作取決於代碼使用的頭文件。