如何獲取觸發了我的內核模塊的file_operation.read
例程(即哪個進程正在讀取/dev/mydev
)的用戶進程的PID?在編寫Linux內核模塊時獲取用戶進程pid
9
A
回答
15
當您的讀取函數正在執行時,它在發出系統調用的進程的上下文中這樣做。因此您應該可以使用current
,即current->pid
。
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_PGID
或PIDTYPE_SID
代替。頭文源是在include/linux/pid.h
作爲靖志指出。
哪種方法的工作取決於代碼使用的頭文件。
相關問題
- 1. Linux內核模塊編程
- 2. linux在內核中從pid獲取進程名稱
- 3. 在運行時從linux內核模塊獲取內核版本
- 4. linux - 獲取進程的pid
- 5. Linux內核模塊編譯
- 6. Linux內核模塊編譯
- 7. 通過他的PID分析一個進程Linux內核編程
- 8. 從Linux內核模塊寫入debugfs
- 9. Linux內核 - 在寫入數據塊時以編程方式檢索塊號
- 10. 使用gcc與內核頭文件編譯Linux內核模塊
- 11. 編譯Linux內核模塊(lincan)
- 12. 如何編譯Linux內核模塊
- 13. Android內核模塊編程
- 14. 如何在Linux內核模塊中讀取/寫入文件?
- 15. Linux內核 - 獲取最後寫入的內存塊
- 16. 在Linux內核模塊中偵聽新進程
- 17. 啓動時內核模塊在Linux內核中的狀態
- 18. Linux內核,linux設備驅動程序或模塊編寫器程序員需要進行算法分析嗎?
- 19. 剖析Linux內核模塊
- 20. Linux內核模塊調試
- 21. 關於linux內核模塊
- 22. 安裝Linux內核模塊
- 23. Linux內核模塊ABI(x86)
- 24. Linux內核模塊編程編譯錯誤
- 25. 如何在安裝新內核時自動執行linux內核模塊編譯?
- 26. Linux內核編程
- 27. 如何在Linux Ubuntu中編譯驅動程序/內核模塊?
- 28. 如何從Linux內核模塊獲取使用次數?
- 29. 如何在Linux內核模塊中獲取CPU信息?
- 30. 其他內核的Linux內核模塊開發編譯
什麼是當前?讀取沒有得到當前的參數... ssize_t(* read)(struct file *,char __user *,size_t,loff_t *); – 0x90 2012-08-11 15:30:01
@ 0x90這是一個宏。 – cnicutar 2012-08-11 15:41:13
http://kernelnewbies.org/FAQ/current,對嗎? – 0x90 2012-08-11 15:54:35