在管理进程之前,我们需要知道什么叫做进程。
我们其实可以简单的把进程理解为,程序在操作系统中运行的过程。
对于进程的管理其实就是程序什么时候启动,整个生命周期需要多少资源,程序进程是如何结束的,是自己结束的还是被其他程序结束的。
还有程序在运行的时候,我们不想让他运行了,要告诉程序你应该结束了,也就需要进程之间的通信,这些也就是进程的管理。
在我们对进程进行管理的时候时候我们需要知道进程的几个概念:
- 进程查看
- 进程的控制命令
- 进程的通信方式 —— 信号
- 守护进程和系统日志
- 服务管理工具 systemctl
- SELinux
进程查看
进程的状态我们可以通过三个命令来进行查看 ps
,pstree
,top
。
ps:p代表进程,s代表状态,其实就是进程状态的缩写。
进程都有一个唯一的编号,用来标识它唯一的名称,那么进程是随便启动的吗?
答案:不是的。
进程其实是一个树形结构,我们可以通过pstree这个命令去查看一个进程的树型结构。
top命令可以更全面的查看进程的运行状态。
PS
当我们执行PS命令的时候可以查看出当前这个终端能够查看到的进程状态,在这里我们可以查看到两个进程,但是系统真的只有两个进程吗?
答案:不是!
PID 就是我们之前提过的,进程在系统中的唯一标识,那么为什么要有唯一标识呢?
因为在我们的Linux系统中进程的名称是可以重复的,例如我们有多个用户登录到系统当中,每个人都可以执行 ps 命令,这个时候我们就需要使用 PID 来去来定位哪个人执行的 PS。
TTY 就是我们当前执行 ps 的终端了,当前执行的终端叫做虚拟终端,所以名字叫做 pts/0,如果通过纯字符界面的话那么执行 ps 命令查看到的 TTY 就应该是 tty/0,tty/1,tty2。
TIME 代表的是进程的运行时间,其实是不具备参考价值的,不用去看这个选项。
如果要查看其他的进程,我们需要使用 ps -e
在这里,我们就可以看到有更多的进程输出了,我们在这里可以看到有一个 1 号进程叫做 systemd,在 CentOS6 上面1 号进程叫做 init。
可以通过 man ps 来查看 ps 更多的选项。
其中我们比较常用的就是 ps -ef
。
我们可以看到,在其中多显示了个 UID,表示这个进程是由哪一个用户来进行启动的,启动了之后如果没对启动用户进行修改的话,那么默认就是启动的那个用户。
我们可以做到如果这个进程是 root 用户启动的改为其他用户。
启动的用户身份不一定是它标识用户身份。就比如我们用 root 用户启动一个 Nginx 程序,但是实际运行的用户是 nobody,所以 UID 并不叫启动用户ID,而叫做有效用户 ID,这里为了方便用户查看,所以显示的用户名。
PPID 叫做父进程,我们所有的进程都要从父进程中继承一些信息,例如我们剩下俩的时候,我们都要继承父母的基因,Linux 也是一样。
加上f 之后,我们可以看到 CMD 也得到了补全,显示了命令的完整路径。
如果我们想要查看一下进程中开启的线程的数量可以使用 ps -eLf
来查看 LWP 的数量。
有的时候程序为了处理并发任务的时候,就需要开启多个线程来进行处理。
当计算机的计算资源不充足的时候,可以查一查是不是进程过多,或者是线程过多导致的系统缓慢。
当然 PS 并不只有这些参数,其他的参数,有机会我会在其他博文中进行讲解。
pstree
通过 pstree 命令,我们就不用在对 ps 命令展示出的数据进行一一统计了,就不用再去查看 2 号进程它的父进程是谁了。
在 pstree 已经以树的结构显示出来了。
上面提到过的,进程在创建的时候,要从父进程那里继承一些东西,然后在个性化的初始化。
top
top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器。
top 显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。 比较准确的说,top 命令提供了实时的对系统处理器的状态监视。它将显示系统中 CPU 最“敏感”的任务列表。该命令可以按 CPU 使用,内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
<center><img src="http://total.2dhi.com/blog/1578246440533.jpg" style="zoom:50%;" /></center>
01:46:50 代表当前的系统时间
up 43 days 代表从最近一次开机到现在经过了多长时间。
1 user 代表当前有一个用户登录
load average 0.00, 0.01, 0.05 平均负载,用来衡量系统的繁忙程度的,后面三个数分别代表1分钟、5分钟、15分钟,如果繁忙程度是1的话,就代表满负载的运行,关于系统平均负载有一个很形象的比喻,可以把我们的系统比喻成一个单车道的告诉公路,如果我们的汽车在高速公路上排满了那么平均负载就是,如果是一个双车道的公路,那么有一条公路排满了,那么它的平均负载就是0.5。
这里的平均负载就是根据不同的时间进行采样,采样之后一分钟进行一次汇总,中间就是5分钟,15分钟,在服务器上 我们常常能见到逐次升高,逐次降低
Tasks 系统会把进程认为成多少个任务,目前是一共有116个进程在运行。
%Cpu(s) 代表着我们的CPU使用情况,us代表有多少的CPU正有多少正在进行用户计算,sy 代表有多少 CPU 正在参与进程之间状态交互,id 表示有多少处于空闲状态,wa 我们把它称为IO Wait,当磁盘过慢的时候,CPU很多的时间都在等待 IO 磁盘操作。
在这里我们需要注意的是 Cpu(s)这代表着,这里显示的是 CPU 使用情况的一个平均值,如果想要查看每个CPU的状态,我们需要在终端输入一个1,来查看每颗 CPU 的使用情况。
ni 代表用户进程空间内改变过优先级的进程占用CPU百分比
hi 代表硬件CPU中断占用百分比
si 代表软中断占用百分比
st 虚拟机占用百分比
KiB mem 代表着我们的内存,total表示一共有多少内存,free有多少内存没有被使用,used表示有多少内存没有没使用,buff/cache表示有多少内存再用来读写缓存。
KiB Swap ,Swap就是我们Linux里面被称为交换分区,在Windows中被称之为虚拟内存,当实际的物理内存不够,又想把一部分空闲内存交换出来的时候,就需要占用我们的Swap。
再往下面就是内存实际的信息了,通过分析CPU和MEM我们就可以知道是哪个进程处于繁忙状态了,并且占用了多少CPU和MEM,默认的情况下是每3秒刷新一次,如果想要加快刷新频率,可以按s
,改变刷新时间。
TIME+ 代表该进程已经运行了多长时间。
总结
通过这三个命令,我们知道了,在Linux中进程是以属性结构进行排列的,进程当中还有与其关联的用户叫做有效用户身份,会以ID的形式进行显示,这里叫做有效用户ID,这也就意味着进程和用户权限有着密不可分的关系。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。