如何获取触发了我的内核模块的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内核(模块编程)中如何从多线程进程获取threadids?
- 4. 在运行时从linux内核模块获取内核版本
- 5. 如何编写Linux内核模块?
- 6. 从内核linux中获取pid的完整进程路径
- 7. linux - 获取进程的pid
- 8. 在汇编程序中编写linux内核模块时的内存访问
- 9. Linux内核模块编译
- 10. Linux内核模块编译
- 11. Linux内核模块编程:makefile
- 12. Linux内核模块编程Makefile错误
- 13. Linux内核模块编程Makefile
- 14. 编译linux内核模块时出错
- 15. 通过他的PID分析一个进程Linux内核编程
- 16. 在solaris内核模块中获取进程ID和父进程
- 17. 执行/调用用户空间程序,并获得其PID,从内核模块
- 18. 从Linux内核模块写入debugfs
- 19. linux内核 - pte_xxx()API在模块编程中不起作用
- 20. Linux内核 - 在写入数据块时以编程方式检索块号
- 21. 使用gcc与内核头文件编译Linux内核模块
- 22. Android内核模块编程
- 23. 如何编译Linux内核模块
- 24. 编译Linux内核模块(lincan)
- 25. 交叉编译Linux内核模块
- 26. 如何在Linux内核模块中读取/写入文件?
- 27. Linux内核 - 获取最后写入的内存块
- 28. Linux内核和我的内核模块
- 29. 在Linux内核模块中侦听新进程
- 30. 在Linux内核模块中使用RPC
什么是当前?读取没有得到当前的参数... 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