[英]Getting user process pid when writing Linux Kernel Module
如何獲取觸發了內核模塊的file_operation.read
例程(即哪個進程正在讀取/dev/mydev
)的用戶進程的PID?
當您的read函數正在執行時,它是在發出系統調用的進程的上下文中執行的。 因此,您應該能夠使用current
,即current->pid
。
這些天來,我們在sched.h中定義了一些輔助函數。 對於pid,可以使用:
pid = task_pid_nr(current);
獲取當前任務的pid。
這是從include/linux/sched.h
起的include/linux/sched.h
中的注釋。
從各種名稱空間中看到的幫助者,將獲得任務的不同pid
- task_xid_nr():全局ID,即從init名稱空間看到的ID;
- task_xid_vnr():虛擬ID,即從當前的pid名稱空間看到的ID。
- task_xid_nr_ns():從指定的ns中看到的ID;
- set_task_vxid():為任務分配虛擬ID;
另請參見include / linux / pid.h中的pid_nr()等
在內核2.6.39手臂構建中,如果current->pid
不起作用,則可以通過以下方法完成:
pid_nr(get_task_pid(current, PIDTYPE_PID))
PIDTYPE_PID
可以用PIDTYPE_PGID
或PIDTYPE_SID
。 標題源位於Yasushi指出的include/linux/pid.h
哪種方法有效取決於代碼使用的頭文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.