目录
1 进程概述和 ps 管理进程
1.1 什么是进程?进程管理需要做什么?
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
• 已分配内存的地址空间;
• 进程 ID;
• 程序的代码;
• 进程状态;
2.进程管理
包括进程调度、中断处理、信号、进程优先级、进程切换、进程状态、进程内存等等。
2.1进程的生命周期图:
描述如下:
父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程。
所有进程都是第一个系统进程的后代。
centos5 或 6PID 为 1 的进程是:init
centos7 PID 为 1 的进程是:systemd
僵尸进程:不执行代码,占用内存地址空间
当一个进程接收到终止信号时,它结束之前需要一段时间来结束所有任务。
在进程执行所有代码之后,它将相关终止报告发给父进程。父进程正常情况下会移除所有子进程的数据结构。如果父进程没能接收子进程退出信号,那么子进程变为僵尸进程。
所以通常在很短的某个时刻内它是一个僵尸进程。使用 kill 命令是不能杀死僵尸进程的,因为它已经被认定为死亡了。可以尝试杀死僵尸进程的父进程,僵尸进程会随之消失。
如果一个进程为僵尸状态,父进程是 init 或systemd 那么需要重启系统来解决问题。线程:线程是进程中产生的一个执行单元,在同一个进程中与其他线程并行运行。线程之间可以共享资源,比如内存、地址空间、打开文件等。
2.2上下文切换:
在处理器执行期间,运行进程的信息被存储在处理器的寄存器和高速缓存中。
执行的进程被加载到寄存器的数据被称为上下文。
在实际处理器运行过程中,先存储运行进程的上下文。
然后将下一个要运行的进程的上下文恢复到寄存器,这个过程称之为上下文切换。
一般不能有太多上下文切换。
因为处理器每次要刷新寄存器和高速缓存,以便释放空间给新进程,可能导致性能下降。
2.3中断处理:
中断是优先级最高的任务之一。
通常由 I/O 产生,比如网络接口、键盘、磁盘控制器等。
当一个中断信号到达内核的时候,内核必须从当 前执行的进程切换到一个新的进程,以便处理这个中断。这意味着中断会导致上下文切换。也就是说大量中断会导致性能下降。
注意:在 Linux 当中有两种类型的中断。硬中断和软中断。
硬中断是由硬件产生的,需要快速响应(比如:磁盘 IO 中断、键盘中断、鼠标中断等)
软中断被用来处理可以推迟的任务(TCP/IP、SCSI 协议操作等)。
2.4进程的属性
(PID):进程ID,是唯一的数值
(PPID):父进程的 ID
启动进程的用户 ID(UID)和所归属的组(GID)
进程状态:运行 R、休眠 S、僵尸 Z
进程执行的优先级
进程所连接的终端名
进程资源占用:比如占用资源大小(内存、CPU 占用量)
3.ps 命令
常用的参数:
a: 显示跟当前终端关联的所有进程
u: 基于用户的格式显示
x: 显示所有进程,不以终端机来区分
常用的选项组合是 ps -aux 和 ps -axu | grep 关键词
注: 最后一列[xxxx] 使用方括号括起来的进程是内核态的进程,没有括起来的是用户态进程。
上面的参数输出每列含意:
USER: 启劢这些进程的用户
PID: 进程的 ID
%CPU 进程占用的 CPU 百分比;
%MEM 占用内存的百分比;
VSZ:进程占用的虚拟内存大小ÿ