簡體   English   中英

編寫Linux內核模塊時獲取用戶進程pid

[英]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_PGIDPIDTYPE_SID 標題源位於Yasushi指出的include/linux/pid.h

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM