Chinaunix首页 | 论坛 | 博客
  • 博客访问: 467252
  • 博文数量: 56
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1957
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-07 23:02
文章分类

全部博文(56)

文章存档

2016年(1)

2014年(7)

2013年(48)

分类: LINUX

2013-07-28 13:46:41

在分析pidtask的关系时,需要首先了解一些概念。



  1. pid是一个数据结构,表示一个进程的进程号,或者表示一个组的组号对于组来说,组号就是组长的进程号,这个可以从文件sched.h的四个函数task_pidtask_pgrptask_session看出来,这个函数也描述了如何从一个task得到其不同的pid结构的方法);

  2. pid是一个结构变量,它真正表示的进程号或者组号是在pid结构中的一个upid结构的nr元素,因为pid只能表示一个nr,由于namespace的存在,一个pid结构中可能有多个upid结构变量,这些变量对应的是不同namespace中的nr号,虽然nr号不同,但它们表示的内容却是一致的

  3. task_struct表示一个进程,进程有多重需求,首先它自己有自己的进程号,其次它可能在某一个组内每个组都有一个pid结构,因此一个task_struct可能会对应对个pid结构,通过struct pid_link pids[PIDTYPE_MAX]关联不同的pid结构。这也决定了一个pid结构可能有多个身份,首先它对应一个进程,因此在struct hlist_head tasks[PIDTYPE_PID]中可以找到它的task_struct;其次它表示一个组,因此在struct hlist_head tasks[PIDTYPE_PGID]struct hlist_head tasks[PIDTYPE_SGID]应该还连接了该组的task_struct结构。

  4. pid_hash是一个hash表,它管理这这些所有的组号、进程号,可以根据号码迅速查找对应的pid结构

  5. pid_bitmap隶属于namespace,即一个namespace对应一个bitmap

  6. 如何从给一个给定的pid.upid.nr号得到它的对应的task_struct呢?在解决这个问题前必须先明白两个问题:1,这个nr是哪个namespace的?这个nr是一个进程号,还是一个组号,如果是进程号,那么很明显它对应的进程只有一个,如果是组号,那么这个组内部则有很多的进程你需要的是哪一个进程?

阅读(2429) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~