Chinaunix首页 | 论坛 | 博客
  • 博客访问: 692201
  • 博文数量: 192
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2177
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(192)

文章存档

2024年(8)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2016-09-04 20:42:08

内核信息收集
    进程之间的关系
  1.   程序创建的进程具有父子关系。如果一个进程创建多个子进程时,则子进程之间具有兄弟关系。
        进程描述符中引入一些字段表示进程之间的关系:
        real_parent:指向创建当前进程的的进程,或者是当创建者已经消亡后,该指针指向init进程。
        parent:指向当前父进程。通常和real_parent一样,只是当另外一个进程调用了ptrace()系统调用后,会改变。 
        children:当前进程创建的子进程链表的头节点
        sibling: 指向下一个或上一个兄弟进程描述符
    下图显示一组进程间的关系:进程P0创建了P1,P2,P3。进程P3创建进程P4。
            
   2. 进程之间的非亲属关系的相关字段
            group_leader:P所在进程组的领头进程的描述符指针
            signal->pgrp:P所在进程组的领头进程的PID
            tgid:P所在线程组的领头进程的PID
            signal->session:P的登录会话领头进程的PID
            ptrace_children:包含所有被跟踪的P进程的子进程的链表头
            pstrace_list:所跟踪进程的实际父进程链表的前一个和下一个元素
    3. pidhash表及其链表
              很多情况下,内核必须能从进程PID导出对应的进程描述符。如linux的kill()系统调用需要从进程的PID导出
        对应的进程描述符指针。为了加速此过程,引入了4个散列表,进程描述符有对应的4个字段,如下:
             PIDTYPE_PID            pid              进程的PID
             PIDTYPE_TGID         tgid              线程组领头进程的PID
             PIDTYPE_PGID         pgrp            进程组领头进程的PID
             PIDTYPE_PID            session       会话领头进程的PID
        下图是PIDTYPE_TGID散列表的例子:
        
        linux利用链表来处理PID冲突
        
    4. 处理PID散列表的函数和宏
        do_each_task_pid(nr, type, task)
        while_each_task_pid(nr, type, task)
        find_task_by_pid_type(type, nr)
        find_task_by_pid(nr)
        attch_pid(task, type, nr)
        detach_pid(task, type)
        next_thread(task)
阅读(2602) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~