获取写Linux内核模块,当用户进程的PID(Getting user process pid wh

2019-07-30 22:18发布

我怎样才能得到它触发了我的内核模块的用户进程的PID file_operation.read例程(即,进程正在读取/dev/mydev )?

Answer 1:

当你读的功能正在执行时,它这样做在发行系统调用的进程上下文。 你应该这样PE能够使用current ,即current->pid



Answer 2:

这些天来,我们在sched.h中定义了一些辅助功能。 在PID的情况下,你可以使用:

pid = task_pid_nr(current);

获得当前任务的PID。

这里是取自评论include/linux/sched.h为V3.8的。

佣工来获得任务的不同PID,因为它们是从不同的命名空间可见

  • task_xid_nr():全球ID,即从初始化命名空间中看到的ID;
  • task_xid_vnr():虚拟ID,即从当前的PID命名空间看到的ID。
  • task_xid_nr_ns():ID从指定的纳秒看出;
  • set_task_vxid():分配一个虚拟ID的任务;

也参见pid_nr()在等在include / linux / pid.h



Answer 3:

在内核2.6.39手臂的身材,如果current->pid不工作,那么可以通过完成:

    pid_nr(get_task_pid(current, PIDTYPE_PID))

PIDTYPE_PID可以通过取代PIDTYPE_PGIDPIDTYPE_SID 。 首标源是在include/linux/pid.h作为靖指出。

哪些方法工作的要看是什么头文件的代码使用。



文章来源: Getting user process pid when writing Linux Kernel Module