17

如何获取触发我的内核模块file_operation.read例程的用户进程的 PID(即,哪个进程正在读取/dev/mydev)?

4

3 回答 3

24

当您的读取函数正在执行时,它是在发出系统调用的进程的上下文中执行的。因此,您应该能够使用current,即current->pid

于 2012-08-11T15:01:10.180 回答
14

这些天来,我们在 sched.h 中定义了一些辅助函数。在 pid 的情况下,您可以使用:

pid = task_pid_nr(current);

获取当前任务的 pid。

这是从include/linux/sched.hv3.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_SIDinclude/linux/pid.h正如 Yasushi 指出的那样,标题来源位于。

哪种方法有效取决于代码使用的头文件。

于 2013-04-25T23:33:58.590 回答