14 c linux kernel-module
如何获取触发我的内核模块file_operation.read例程的用户进程的PID (即哪个进程正在读取/dev/mydev)?
这些天,我们在sched.h中定义了一些辅助函数.在pid的情况下,您可以使用:
pid = task_pid_nr(current);
Run Code Online (Sandbox Code Playgroud)
获取当前任务的pid.
这是从include/linux/sched.hv3.8开始的评论.
帮助者从各种命名空间中看到任务的不同pid
- task_xid_nr():全局id,即从init命名空间看到的id;
- task_xid_vnr():虚拟标识,即从当前的pid名称空间看到的标识.
- 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))
Run Code Online (Sandbox Code Playgroud)
可以PIDTYPE_PID用PIDTYPE_PGID或代替PIDTYPE_SID。include/linux/pid.h正如 Yasushi 指出的那样,标头来源位于。
哪种方法有效取决于代码使用的头文件。