13 | 进程数据结构(中):项目多了就需要项目管理系统
刘超
该思维导图由 AI 生成,仅供参考
上一节我们讲了,task_struct 这个结构非常长。由此我们可以看出,Linux 内核的任务管理是非常复杂的。上一节,我们只是讲了一部分,今天我们接着来解析剩下的部分。
运行统计信息
作为项目经理,你肯定需要了解项目的运行情况。例如,有的员工很长时间都在做一个任务,这个时候你就需要特别关注一下;再如,有的员工的琐碎任务太多,这会大大影响他的工作效率。
那如何才能知道这些员工的工作情况呢?在进程的运行过程中,会有一些统计量,具体你可以看下面的列表。这里面有进程在用户态和内核态消耗的时间、上下文切换的次数等等。
进程亲缘关系
从我们之前讲的创建进程的过程,可以看出,任何一个进程都有父进程。所以,整个进程其实就是一棵进程树。而拥有同一父进程的所有进程都具有兄弟关系。
parent 指向其父进程。当它终止时,必须向它的父进程发送信号。
children 表示链表的头部。链表中的所有元素都是它的子进程。
sibling 用于把当前进程插入到兄弟链表中。
通常情况下,real_parent 和 parent 是一样的,但是也会有另外的情况存在。例如,bash 创建一个进程,那进程的 parent 和 real_parent 就都是 bash。如果在 bash 上使用 GDB 来 debug 一个进程,这个时候 GDB 是 parent,bash 是这个进程的 real_parent。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入解析了Linux内核中进程数据结构的重要内容,包括进程的运行统计信息、亲缘关系表示方式、进程权限的控制、内存管理中的mm_struct结构以及capabilities机制。文章重点介绍了进程亲缘关系维护的数据结构和进程权限中setuid的原理,强调了它们在内核中的重要性和实际应用。读者通过本文可以快速了解Linux内核中进程管理的复杂性和技术特点,为深入学习任务管理系统提供了基础知识。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》,新⼈⾸单¥68
《趣谈 Linux 操作系统》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(35)
- 最新
- 精选
- 石维康文中说“如果在 bash 上使用 GDB 来 debug 一个进程,这个时候 GDB 是 real_parent,bash 是这个进程的 parent。” 根据copy_process里对PT_PTRACED标志位处理的流程来看,应该是 bash 是 real_parent,GDB 是这个进程的 parent 吧?
作者回复: 谢谢,果真弄反了
2019-04-24463 - garlic进程的相关信息可以通过ps 获取, 依赖关系通过pstree获取,文件相关通过lsof, fuser,capabilities相关通过capsh,getcap获取, 学习笔记https://garlicspace.com/2019/07/03/获取进程信息相关命令/
作者回复: 赞
2019-07-0349 - WL请问一下老师这句代码中的, __rcu是什么意思? 起到的作用是啥? 在网上好像没搜到. const struct cred __rcu *real_cred;
作者回复: RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制。顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据”。这是 Linux 内核实现的一种针对“读多写少”的共享数据的同步机制。
2019-04-30542 - 逍觉迷遥①这节内容解决了关于上节task_struct为什么要用链表结构,是为了维护多个task之间的关系。一个task节点的parent指针指向其父进程task,children指针指向子进程所有task的头部,然后又靠 sibling指针来维护统一级兄弟task! ②setUid是一个权限的特殊标志位,带有这个标志位可以对文件执行等同root的权限!比如,Linux下修改密码的指令passwd,我们ls去查看时发现其权限就有s标志,这个就是之所以能修改密码的原因。如果去掉这个权限,再以普通用户身份去修改密码则会提示没有权限!这个例子和老师的玩游戏可以说是异曲同工,但它更具有普遍性,大家也更熟悉! ③capabilities听了感觉云里雾里还是一知半解,老师着重讲了概念,但还是不知道怎么用???希望老师结合实际使用例子讲一下就更好了!!!
作者回复: capabilities在容器那一节会用到
2019-04-24332 - manatee通过/proc/pid/status可以看到进程的所属的各种id
作者回复: 建议大家多看/proc/pid下的相关信息
2019-04-24216 - wumin作业能给出具体的命令吗?
作者回复: 其实一搜就能搜索到的
2019-05-2127 - 勤劳的小胖子-libo通过passwd来试验setUid很方便,谢谢一起学习的同志
作者回复: 赞
2019-05-121 - Linuxeru64 real_start_time;// 进程启动时间,包含睡眠时间 感觉不好理解是不是启动时长?
作者回复: CLOCK_MONOTONIC是monotonic time,随着进程的运行不断加,而CLOCK_REALTIME是wall time,墙上的时间,实际时间,系统管理员可以调整的时间
2019-04-241 - LS由于 list_add(&subtask->sibling, ¤t->children); 文中的进程链表图是不是应该是 父进程的 children 指向的是 子进程的 sibling 而不是 子进程 task 结构体本身?
作者回复: 指向task_struct,不过不用纠结呀,指向slibing也可以找到指向task_struct的指针,指向task_struct也可以找到指向sibling的指针
2019-05-07 - 青石请问老师,同一级的所有进程的sibling是指向同一块内存地址吗?
作者回复: 不是啊,在一串链表上
2019-04-25
收起评论