2012-08-11 165 views

回答

15

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

+0

什么是当前?读取没有得到当前的参数... ssize_t(* read)(struct file *,char __user *,size_t,loff_t *); – 0x90 2012-08-11 15:30:01

+2

@ 0x90这是一个宏。 – cnicutar 2012-08-11 15:41:13

+0

http://kernelnewbies.org/FAQ/current,对吗? – 0x90 2012-08-11 15:54:35

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_PGIDPIDTYPE_SID代替。头文源是在include/linux/pid.h作为靖志指出。

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