如何获取触发我的内核模块file_operation.read
例程的用户进程的 PID(即,哪个进程正在读取/dev/mydev
)?
user1592383
问问题
33487 次
3 回答
24
当您的读取函数正在执行时,它是在发出系统调用的进程的上下文中执行的。因此,您应该能够使用current
,即current->pid
。
于 2012-08-11T15:01:10.180 回答
14
这些天来,我们在 sched.h 中定义了一些辅助函数。在 pid 的情况下,您可以使用:
pid = task_pid_nr(current);
获取当前任务的 pid。
这是从include/linux/sched.h
v3.8 开始的评论。
从各种命名空间中看到任务的不同 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() 等
于 2013-03-21T07:22:18.710 回答
4
在内核 2.6.39 arm build 上,如果current->pid
不起作用,则可以通过以下方式完成:
pid_nr(get_task_pid(current, PIDTYPE_PID))
PIDTYPE_PID
可以用或PIDTYPE_PGID
代替PIDTYPE_SID
。include/linux/pid.h
正如 Yasushi 指出的那样,标题来源位于。
哪种方法有效取决于代码使用的头文件。
于 2013-04-25T23:33:58.590 回答