Linux随笔05
第5章 进程管理
进程的含义为正在运行的程序,包括这个运行的程序所占用的系统资源。进程是具有一定独立功能的程序关于某个数据集合的一次运动活动,是系统进行资源分配和调度的一个独立单位。同一个程序,同一时刻被两次运行,它们就是两个独立的进程。
5.1 初始进程
在使用passwd命令时,系统将执行/usr/bin/passwd这个程序文件,同时会产生一个进程
/usr/bin/passwd程序文件会占用少量的硬盘来存储空间,并且不会占用系统的四大核心资源Disk IO、Memory、CPU、Network。如果用户执行了该程序文件,系统将会产生一个passwd进程。
进程是已启动的可执行程序的运行实例
进程的组成部分:
(1)已分配内存的地址空间;
(2)安全属性,包括所有权凭据和特权
(3)程序代码的一个或多个执行线程;
(4)进程状态
每个进程都有唯一的进程标识PID,一个PID只能标识一个进程,PPID为父进程ID,需要给该进程分配系统资源。
进程状态:指程序执行过程中的变化。进程状态随着程序的执行和外界条件的变化而转换。一般分为:就绪态、运行态、阻塞态。
就绪态:进程已经具备运行条件,但是CPU还没有分配过来。
运行态:进程占用CPU,并在CPU上运行
阻塞态:进程因等待某件事发生而暂时不能运行

不同的进程对系统资源的需求是不一样的,有些进程属于IO密集型,有些进程属于CPU密集型
5.2 查看进程
5.2.1 静态查看进程:
ps命令可以查看静态进程,仅仅是捕获某一个瞬间某一个进程的状态,类似于给进程制作快照。
使用ps aux命令查看当前目录的进程,包括进程的PID(进程ID)、进程名称、占用CPU时间、内存使用情况等
| aux | 功能 |
| a | 显示终端上的所有进程,包括其他用户的进程 |
| u | 表示列出进程的用户 |
| x | 显示所有终端的进程 |

当TTY为“ ?”时表示不依赖任何终端运行
基本权限意义:
| 列名 | 说明 |
| USER | 运行进程的用户 |
| PID | 进程ID |
| %CPU | CPU占有率 |
| %MEM | 内存占用率 |
| VSZ | 占用虚拟内存 |
| RSS | 占用实际内存 |
| TTY | 进程运行的终端 |
| STAT | 进程状态 |
| TIME | 进程累计占用CPU时间 |
| COMMAND | 进程发起者 |
ps aux --sort -%cpu命令:用于查看系统中运行的进程,按照CPU占有百分比的降序排序

ps-ef命令:查看UID、PID、PPID等信息。它结合了两个命令:ps 和 grep。ps 命令用于显示进程信息,而 grep 命令用于过滤结果。在这个组合命令中,ps -ef 用于在 ps 命令的结果中搜索与指定关键词匹配的进程。

一般情况下不是所有显示的内容都有意义,为了快速查找,需要显示的内容简洁并有针对性,用户可以使用“ps aox”命令自定义显示的字段
ps aox命令:用来查看系统中所有进程的详细信息,如进程ID、用户、占用资源等。

查看指定进程PID的方法:
(1)使用cat命令

(2)使用pidof命令

(3)使用pgrep命令

5.2.2 动态查看进程:
top命令可以实时动态地显示进程,类似于Windows系统中的任务管理器。使用top命令动态查看进程时,进程信息分为上下两部分,上面为整体信息,下面为每一个进程的信息。

如图所示:
Tasks:230 total:进程个数
1 runnin:正在使用CPU的进程个数
229 sleepi:进程休眠个数
0 stopped:进程停止个数
0 zombie:进程僵死个数
按M键以内存占用率排序

按P键以CPU占有率排序

按N键以PID数值大小排序

按R键对排序进行反转

按F键显示自定义显示字段。按上下键移动。按空格键选中。按q键退出自定义显示字段。按W键保存自定义显示字段

按1键显示所有CPU的负载

top -d可以设置刷新时间,以秒为单位

top -p可以指定查看一个或多个进程的动态信息

top -u可以查看用户的进程
top -n可以设置刷新次数,完成后自动退出

5.3 信号控制进程
在进程运行进程中,若由于某些原因需要终止该进程,用户可以给与该进程一个信号(signal),进程接收到信号之后,就会依照信号的要求做出相应的反应。
5.3.1 kill命令
Linux中的kill命令用来终止指定进程的运行。首先使用ps/pidof/top等工具获取进程PID,然后使用kill命令来杀死该进程。kill命令通过向进程发送指定的信号来结束相应的进程。
kill -l命令查看全部信号

常见的信号:
| 信号编号 | 名称 | 特性及意义 |
| 1 | SIGHUP | 启动被终止的进程,重新加载,PID不会发生变化 |
| 9 | SIGKILL | 强制终止进程,使用此信号可能导致进程无法再次启动 |
| 15 | SIGTERM | 默认信号,以正常流程终止进程,允许进程释放资源。若进程已出现问题无响应,此信号将不起作用 |
| 18 | SIGCONT | 恢复进程 |
| 19 | SIGSTOP | 暂停进程 |
使用pidof命令查看vsftpd服务进程PID,然后测试信号SIGHUP。
eg. vsftpd配置文件发生改变,希望重新加载
[root@localhost suli]# pidof vsftpd [root@localhost suli]# kill -1 vsftpd [root@localhost suli]# pidof vsftpd
测试信号SIGTERM,该信号为默认信号,可省略输入15编号,服务器进程停止。一般情况下,程序会自带终止服务。
eg. vsftpd服务停止脚本为“systemctl stop vsftpd”
[root@localhost suli]# kill 11847 [root@localhost suli]# pidof vsftpd
tty命令:重新开启终端
5.3.2 killall命令
killall命令可以用于终止某个指定名称的服务所对应的全部进行
eg. 使用killall命令终止所有的vsftpd服务进程
[root@localhost suli]# killall vsftpd
[root@localhost suli]# pidof vsftpd
5.4 进程优先级
进程优先级是一个数值,动态的优先级和静态的优先级决定了进程被CPU处理的顺序。一个拥有更高进程优先级的进程被CPU处理的概率更高。 每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux系统能够运行的进(和线数)可以超出实际可用的CPU及其核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速切换,从而造成多个进程在同时运行的假象。
由于不是每个进程都同样重要,可以让进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为SCHEDOTHER(也称为SCHED_NORMAL),但还有其他一些调度策略用于不同的目的。
SCHED_OTHER调度策略使用的进程的相对优先级称为进程的nice值,有40个不同级别,其范围为-20~19,数值越小优先级越高,数值越大优先级越低。例如,-20的优先级最高,该进程不倾向于让出CPU;19的优先级最低,该进程容易将CPU让给其他进程。
此处需要注意的是,普通用户调整应用程序优先权值的范围为0~19,只有超级用户有权限使用更高的优先权值。
5.5 作业控制
作业控制是一个命令行功能,允许一个Shell实例运行和管理多个命令。如果没有作业控制,父进程 fork()一个子进程后将休眠,直到子进程退出。使用作业控制可以选择性暂停、恢复以及异步运行命令,让 Shell 可以在子进程运行期间返回接受其他命令。
foreground:前台进程是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。
background:后台进程没有控制终端,不需要终端的交互。
jobs命令用于显示当前Shell中的作业列表及作业状态,包括后台运行的任务,该命令可以显示作业ID
bg命令可以把任务移动至后台
fg命令可以将后台进程移动到前台,进程会占用终端,既可以使用键盘读取或写入。使用fg命令时不添加任何作业号,则默认调用最近的一个进程

浙公网安备 33010602011771号