如何获得触发我的内核模块的file_operation.read
例程的用户进程的PID(即哪个进程正在读取/dev/mydev
)?
当您的读取功能正在执行时,它正在发出系统调用的过程中执行此操作。 你应该能够使用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 arm构建上,如果current->pid
不起作用,那么可以这样做:
pid_nr(get_task_pid(current, PIDTYPE_PID))
PIDTYPE_PID
可以由PIDTYPE_PGID
或PIDTYPE_SID
。 头文件的源文件位于include/linux/pid.h
正如Yasushi所指出的那样。
哪个方法工作取决于代码使用的头文件。