首先我们弄清楚,进程在linux中的含义:
程序本身并不是进程,进程是处于执行期的程序以及相关资源的总称。注意,有两点:
- 执行期的程序
- 相关资源
补充一点:在Linux中,进程的另一个名字就是叫做task,任务。
那么进程在如何存放的?
- Linux将进程放置在任务队列中,并且用进程描述符进行表示,描述符中包含了进程相关的所有信息。
进程如何区分?
- 通过PID给每个进程编号,以此来区分进程。
进程有哪些状态?
进程描述符中state中存储着进程的状态信息,系统中的进程必然处于下列五种状态中:
- task_running(运行)
- task_interruptible(可中断)--睡眠(阻塞)
- task_uninterruptible(不可中断)--除了收到信号不会被中断或者准备投入运行,其它与上面一样
- task_traced(被跟踪进程)
- task_stop(停止)
有时候我们在执行ps(1)命令时,会有被标记为D状态而又不能被杀死的进程的原因就是这个进程的状态为: 不可中断状态。
Linux进程家族树?
- 延续UNIX风格,所有进程都是PID为1的进程的后代。
进程最终会结束,那么结束之后就要进行一系列的操作,主要操作有以下几步:
1.设置task_struct为PF_EXITING
2.释放进程内资源
3.重新为子进程寻找父类(防止孤儿进程出现)
4.删除进程描述符
这一章我们了解到进程的一些基本信息及生存周期里面的一些动作。下一章为进程调度,讲解内核以某种机制来控制进程的运行顺序。