如何获取触发了我的内核模块的file_operation.read
例程(即哪个进程正在读取/dev/mydev
)的用户进程的PID?在编写Linux内核模块时获取用户进程pid
9
A
回答
15
当您的读取函数正在执行时,它在发出系统调用的进程的上下文中这样做。因此您应该可以使用current
,即current->pid
。
7
现在,我们在sched.h中定义了一些辅助函数。在pid的情况下,您可以使用:
pid = task_pid_nr(current);
获取当前任务的pid。
这里是从v3.8开始的include/linux/sched.h
的评论。
佣工来获得任务的不同PID,因为他们看到来自不同的命名空间
- task_xid_nr():全球ID,即从初始化命名空间中看到的ID;
- task_xid_vnr():虚拟ID,即从当前的pid命名空间中看到的id。
- task_xid_nr_ns():从指定的ns中看到的id;
- set_task_vxid():为任务分配一个虚拟ID;
又见pid_nr()等,在在include/linux/pid.h
2
在内核2.6.39手臂的身材,如果current->pid
不工作,那么它可以这样做:
pid_nr(get_task_pid(current, PIDTYPE_PID))
PIDTYPE_PID
可以用PIDTYPE_PGID
或PIDTYPE_SID
代替。头文源是在include/linux/pid.h
作为靖志指出。
哪种方法的工作取决于代码使用的头文件。
相关问题
- 1. Linux内核模块编程
- 2. linux在内核中从pid获取进程名称
- 3. 在运行时从linux内核模块获取内核版本
- 4. linux - 获取进程的pid
- 5. Linux内核模块编译
- 6. Linux内核模块编译
- 7. 通过他的PID分析一个进程Linux内核编程
- 8. 从Linux内核模块写入debugfs
- 9. Linux内核 - 在写入数据块时以编程方式检索块号
- 10. 使用gcc与内核头文件编译Linux内核模块
- 11. 编译Linux内核模块(lincan)
- 12. 如何编译Linux内核模块
- 13. Android内核模块编程
- 14. 如何在Linux内核模块中读取/写入文件?
- 15. Linux内核 - 获取最后写入的内存块
- 16. 在Linux内核模块中侦听新进程
- 17. 启动时内核模块在Linux内核中的状态
- 18. Linux内核,linux设备驱动程序或模块编写器程序员需要进行算法分析吗?
- 19. 剖析Linux内核模块
- 20. Linux内核模块调试
- 21. 关于linux内核模块
- 22. 安装Linux内核模块
- 23. Linux内核模块ABI(x86)
- 24. Linux内核模块编程编译错误
- 25. 如何在安装新内核时自动执行linux内核模块编译?
- 26. Linux内核编程
- 27. 如何在Linux Ubuntu中编译驱动程序/内核模块?
- 28. 如何从Linux内核模块获取使用次数?
- 29. 如何在Linux内核模块中获取CPU信息?
- 30. 其他内核的Linux内核模块开发编译
什么是当前?读取没有得到当前的参数... ssize_t(* read)(struct file *,char __user *,size_t,loff_t *); – 0x90 2012-08-11 15:30:01
@ 0x90这是一个宏。 – cnicutar 2012-08-11 15:41:13
http://kernelnewbies.org/FAQ/current,对吗? – 0x90 2012-08-11 15:54:35