我怎样才能得到它触发了我的内核模块的用户进程的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_PGID
或PIDTYPE_SID
。 首标源是在include/linux/pid.h
作为靖指出。
哪些方法工作的要看是什么头文件的代码使用。
文章来源: Getting user process pid when writing Linux Kernel Module