《Linux内核设计与实现》读书笔记 第三章

本章讨论了linux进程的生命周期,以及进程相关的一些抽象概念;

一、进程描述符

二话不说,先看一下进程描述符(task_struct)源码,这个结构体定义在<linux/sched.h>中,因为这个结构体太大了,就不贴代码了,就简单记录一些重要的字段吧;

  • pid
    进程id

  • state
    进程状态

进程状态机.png
  • parent
    指向父进程描述符

  • children
    子进程链表

二、进程的生命周期

  • 创建
    分为fork和exec两步,fork通过写时拷贝当前进程创建子进程,exec读取可执行文件载入地址空间运行;

  • 终结
    通过exit退出执行,释放进程占用的资源,状态置为僵死,此时进程描述符依然存留在内存中,直到父进程调用wait为止;
    如果父进程先行exit了,其子进程将会沦为孤儿进程,之后这些子进程退出时,由于没有父进程调用wait,其进程描述符永远无法回收;
    对于这种情况,应对方法是为其找到养父进程,实在找不到就由init进程充当其养父;

推荐阅读更多精彩内容