目录
一、进程
1.定义
进程是已启动的可执行程序的运行中的实例
2.组成
已分配的内存的地址空间
安全属性,包括所有凭证和特权
程序代码的一个或多个执行线程
进程状态
3.进程环境包括
本地和全局变量
当前调度上下文
分配的系统资源,如文件描述符合网络端口
4.进程的生命周期
现有的父进程复制自己的地址空间(fork)来创建一个新的子进程结构,每个新进程分配有一个唯一进程ID(PID),满足跟踪和安全性需求,PID和父进程ID(PPID)是新进程环境的元素,任何进程可创建子进程,所有进程都是第一个系统进程的后代
通过fork进程,子进程继承安全性身份、过去和当前的文件描述符、端口、资源特权,环境变量,以及程序代码。随后,子进程可能exec其自己的程序代码。通常,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求(wait),在退出时,子进程已经关闭或者丢弃了其资源和环境。剩下唯一的资源叫僵停,是进程表中的一个条目。父进程在子进程退出时收到信号而被唤醒,清理子条目的进程表,由此释放子进程的最后一个资源,然后,父进程继续执行自己的程序代码。
二、描述进程状态
名称 |
标志 |
内核定义的状态名称和描述 |
运行 |
红 |
TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪 |
睡眠 |
S |
TASK_INTERRUPTICLE:进程正在等待吗某一条件 |
睡眠 |
D |
TASK_UNINTERRUPTICLE:此进程也在睡眠,但是与S状态不同,不会响应信号。仅仅在进程中断可能会导致意外设备状态的情况使用 |
睡眠 |
K |
TASK_KILLABLE:与不可中断的D状态相同,但是有修改,允许等待中的任务响应要被中断(彻底退出)的信号 |
睡眠 |
I |
TASK_REPORT_IDLE:D状态的一个子集,在计算负载均衡值时,内核不会统计这些进程 |
已停止 |
T |
TASK_STOPPED:进程已被停止(暂停) |
已停止 |
T |
TASK_TRACED:正在被调试的进程也会被临时停止,并且共享一个T状态标志 |
僵停 |
Z |
EXIT_ZOMBIE:子进程在退出时向父进程发出信号 |
僵停 |
X |
EXIT_DEAD:当前父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放 |
三、相关命令
1.top命令
S列显示每个进程的状态,在单CPU系统上,一次只能运行一个进程,可以看到有多个R进程,并非所有进程都在运行,有些在等待
2.ps命令
用于列出当先进程,显示更详细的信息包括:
(1)用户UID,它确定进程的特权
(2)PID
(3)CPU和已经花费的实际时间
(4)进程在各种位置上分配内存数量
(5)进程stdout的位置,称为控制端
选项:
-aux 最常见的选项集,显示包括无控制终端的进程在内的所有进程。
-lax 提供更多技术的详细信息,但是可以避免查询用户名来加快显示。
-ef 类似于UNIX的语法使用选项。
-j 显示与作业相关的信息。
方括号中的进程(通常位于列表顶部)为调度的内核线程
僵停列为exiting和defunct
ps输出是一次性的,top可以实时更新输出
ps可以采用树形显示格式,便于查看父子进程之间的关系
二、中断进程
1.基本进程管理信号
信号编号 |
短名称 |
定义 |
用途 |
1 |
HUP |
挂起 |
用于报告中断控制进程的终止,也用于请求进程重新初始化(重新加载配置)而不终止 |
2 |
INT |
键盘中断 |
导致程序终止,可以被拦截或处理,通过按INTR键序列(ctrl+C)发送 |
3 |
QUIT |
键盘退出 |
与SIGINT相似,在终止时添加进程转储。通过按QUIT键序列(ctrl+\)发送 |
9 |
KILL |
中断、无法拦截 |
导致立即终止程序,无法拦截,忽略或处理,总是致命的 |
15 |
TERM(默认) |
终止 |
导致程序终止,和SIGKILL不同,可以拦截,忽略处理,要求程序终止的“友好”方式;允许自我清理 |
18 |
CONT |
继续 |
发送至进程使其恢复(若已经停止)。无法被拦截,即使被处理,也始终恢复进程 |
19 |
STOP |
停止、无法拦截 |
暂停进程,无法被拦截或处理 |
20 |
TSTP |
键盘停止 |
和SIGSTOP不同,可以被拦截、忽略或处理,通过按SUSP键序列(ctrl+Z)发送 |
2.每个信号的默认操作
终止——导致程序立即终止(退出)
核心转储——导致程序保存内存镜像(核心转储),然后终止
停止——导致程序停止执行(暂停),再等待继续(恢复)
3.相关命令
(1)kill命令
此命令根据PID编号向进程发送信号,此命令可用于发送任何信号,而不仅仅是终止信号
选项:
-l 列出所有可用信号的名称和编号
(2)killall命令
可以根据命令名称向多个进程发送信号
(3)pkill命令
向一个或多个符合条件的进程发送信号,选择条件可以是命令名称、特定用户拥有的进程或所有系统范围进程。pkill命令包括高级选择条件:
命令:具有模式匹配的命令名称的进程
UID:某一Linux用户账户拥有的进程吗,无论是有效还是真实
GID:某一Linux组账户拥有的进程,无论有效还是真实
父级:特定父进程的子进程
终端:运行于特定控制终端的进程
三、以管理员身份注销账户
要注销某个用户,首先确定要终止的登录会话,使用w命令列出用户登录和当前运行的进程,记录TTY和FROM列,以确定要关闭的会话
所有用户登录会话都与某个终端设备(TTY)相关联,若设备名称的格式为pts/N,说明这是一个与图形终端窗口或远程登录会话相关联的伪终端,如果格式为ttyN,则说明用户位于一个系统控制台、替代控制台或其他直接连接的终端设备上
四、监控进程活动
1.负载均衡
(1)介绍
负载均衡表示一段时间内感知系统负载,报告CPU上准备运行的进程数以及等待磁盘或网络I/O完成的进程数
(2)负载均衡相关数据解释
三个平均值表示了1,5,15分钟的负载情况
(3)关于CPU的负载均衡解释
需要CPU时间的进程是增加负载数的原因,可以根据显示的负载均衡值除以系统中的逻辑CPU数,低于1,则资源利用率好,等待时间短,高于1,则资源饱和度高,等待时间长。
空闲CPU队列的负载数为0,每个等待CPU处理的进程都会使负载数加1,如果有一个进程在CPU上运行,则负载数为1,尽管资源(CPU)处于使用状态,但是没有等待要求,如果该进程运行整整1分钟,那么它对着1分钟的负载均衡贡献值就是1。