加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

从C语言源代码分析,神秘的Linux系统是如何记录和描述进程的?

发布时间:2019-08-03 07:40:07 所属栏目:Windows 来源:嵌入式时代
导读:上一节简要讨论了下Linux操作系统中进程的概念,其实简单来说,进程无非就是处于运行期的程序及其相关资源的总和。这里读者应该注意相关资源一词,Linux 在内核中是如何记录进程的资源的呢? Linux内核如何记录进程的资源? 首先应该明白,Linux 内核大都是

Linux 系统中的进程必定处于这 5 种状态之一。从上到下,分别表示进程处于:

  • 正在运行或者准备运行
  • 正在睡眠,但是可中断,接收到信号会被提前唤醒
  • 正在睡眠,并且不可中断,也即即使接收到信号也不会被唤醒
  • 被其他进程跟踪中
  • 停止运行

现在就明白有时无法通过 kill 命令杀死 D 状态的进程了,这是因为这些进程处于不响应信号的状态,kill 命令本质上是发送 SIGKILL 信号,自然无法杀死该进程。

父进程和子进程

进程的父进程和子进程也属于进程的资源,因此也被记录在 task_struct 结构体中,请看相关C语言代码:

从C语言源代码分析,神秘的Linux系统是如何记录和描述进程的?

访问当前进程的父进程和子进程是方便的

所以要访问当前进程的父进程和子进程是方便的,例如:

  1. struct task_struct *p = current->parent; 
  2. struct task_stuck *c = current->children; 

稍稍思考一下,应该能够发现进程结构体 task_struct 中的 parent 指针和 children 指针其实构成了一条链表,通过这样的链表,我们能够轻易的访问进程的父进程,祖父进程…, 以及子进程,孙进程… 等。不过应该明白,对于拥有大量进程的系统来说,重复遍历所有进程的开销是很大的。

小结

本节先讨论了Linux内核如何记录和描述进程资源,可以看出,内核管理进程其实就是管理 task_struct 结构体。接着,通过C语言源代码查看了内核如何访问 task_struct 结构体,以及如何区分进程,最后我们一起还讨论了进程的状态和家族树,可见,Linux内核源代码也并不是神秘到不可理解。

【编辑推荐】

  1. 在Linux上用Bash脚本监控messages日志
  2. 在Linux上安装NetData性能监控工具
  3. Microsoft如何使Windows 10 Pro成为PC爱好者的操作系统
  4. Linux零拷贝技术,看完这篇文章就懂了
  5. 记一次Linux服务器入侵应急响应
【责任编辑:华轩 TEL:(010)68476606】
点赞 0

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读