本章讨论了linux进程的生命周期,以及进程相关的一些抽象概念;
一、进程描述符
二话不说,先看一下进程描述符(task_struct)源码,这个结构体定义在<linux/sched.h>中,因为这个结构体太大了,就不贴代码了,就简单记录一些重要的字段吧;
-
pid
进程id -
state
进程状态
-
parent
指向父进程描述符 -
children
子进程链表
二、进程的生命周期
-
创建
分为fork和exec两步,fork通过写时拷贝当前进程创建子进程,exec读取可执行文件载入地址空间运行; -
终结
通过exit退出执行,释放进程占用的资源,状态置为僵死,此时进程描述符依然存留在内存中,直到父进程调用wait为止;
如果父进程先行exit了,其子进程将会沦为孤儿进程,之后这些子进程退出时,由于没有父进程调用wait,其进程描述符永远无法回收;
对于这种情况,应对方法是为其找到养父进程,实在找不到就由init进程充当其养父;
网友评论