Getting user process pid when writing Linux Kernel Module

只愿长相守 提交于 2019-12-03 17:11:51

问题


How can I get the PID of the user process which triggered my Kernel module's file_operation.read routine (i.e., which process is reading /dev/mydev) ?


回答1:


When your read function is executing, it's doing so in the context of the process that issued the system call. You should thus pe able to use current, i.e. current->pid.




回答2:


These days, we have some helper functions defined in sched.h. In the case of pid, you can use:

pid = task_pid_nr(current);

to get the current task's pid.

here is the comment taken from include/linux/sched.h as of v3.8.

the helpers to get the task's different pids as they are seen from various namespaces

  • task_xid_nr() : global id, i.e. the id seen from the init namespace;
  • task_xid_vnr() : virtual id, i.e. the id seen from the pid namespace of current.
  • task_xid_nr_ns() : id seen from the ns specified;
  • set_task_vxid() : assigns a virtual id to a task;

see also pid_nr() etc in include/linux/pid.h




回答3:


On a kernel 2.6.39 arm build, if current->pid does not work then it may be done by:

    pid_nr(get_task_pid(current, PIDTYPE_PID))

The PIDTYPE_PID can be substituted by PIDTYPE_PGID or PIDTYPE_SID. The header source is at include/linux/pid.h as Yasushi pointed out.

Which of the approaches work depends on what header files the code uses.



来源:https://stackoverflow.com/questions/11915728/getting-user-process-pid-when-writing-linux-kernel-module

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!