进程的概念
管理进程
- 标识符pid:描述本进程的唯一标识符,区别其他进程
- 状态:任务状态、退出代码、退出信号等
- 优先级:相对于其他进程的优先级
- 程序计数器:程序中即将被执行的下条指令地址,CPU里的重要寄存器PC指针
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
- 上下文数据:进程执行时处理器的寄存器中的数据,包括通用寄存器、程序计数器、程序状态字PSW(如执行方式、中断屏蔽字等)、用户栈指针(存放过程调用和系统调用参数和调用地址)
- I/O状态信息:包括显示的I/O请求、分配给进程的I/O设备和被进程使用的文件列表
- 记账信息:可能包括处理器时间总和,使用的时钟数总和、时间限制、记账号等
- 其他信息
所有运行在系统的进程都以task_struct链表的形式存在内核中
查看进程
进程标识符
进程状态
- 运行状态R:表明进程在运行中或在运行队列中
- 睡眠状态S:也称为可中断睡眠状态,进程在等待事件完成,可以被kill掉
- 磁盘休眠状态D:也称为不可中断睡眠状态,这个状态的进程会等待I/O的结束,不能被kill掉
- 停止状态T:可以通过发送SIGSTOP信号给进程来停止进程,被暂停的进程可以通过发送SIGCOUT信号让进程继续执行
- 死亡状态X:这个状态只是一个返回状态,不会再列表中看到
- 僵尸状态(Z)是一个比较特殊的状态,当进程退出并且父进程没有读到子进程的退出代码就会产生僵尸进程
- 僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取子进程的退出代码
- 当子进程提前退出,父进程还在运行但是没有读取子进程的退出代码,子进程进入僵尸状态
- 子进程的退出状态会一直维护下去,维护退出状态本身就是要用数据维护,也属于进程基本信息,保存在task_struct中
- 所以僵尸状态不退出,PCB要一直维护退出信息,如果一个父进程创建了许多子进程,都不进行回收,会造成内存资源的极大浪费,也会造成内存泄漏
父进程提前退出,子进程就是孤儿进程,孤儿进程会被1号init进程领养,由init进程回收
进程优先级
- PRI是进程的优先级,值越小优先级越高
- NI是进程的nice值,表示进程可被执行的优先级修正数值,nice值取值范围是[-20,19]这40个级别,存在上下限是为了让调度器调度资源均衡
- 进程的优先级PRI(new) = PRI(old) + nice,所以调整进程的优先级就是调整nice值
- nice值不是进程的优先级,但是nice值会影响进程的优先级