【linux】循序渐进学运维-基础篇-进程管理


文章目录


本文是循序渐进学运维-基础篇系列的第44篇文章


本文我们主要来探讨Linux下的进程,如果对你有帮助欢迎点赞收藏。

Linux进程

1. 进程的概念

Linux当中有很多用户,每个用户都可以同时运行多个程序,靠程序名来记忆每个程序,显然不是一个好办法。 Linux当中为了区分每一个运行的程序,给没给进程做了一个标识,这个标识我们叫他进程号(process ID) ,就像一个ip地址一样,通过进程号来辨别每个进程。

操作系统给每个用户赋予了权限,用户可以控制自己的进程,比如分配不同的优先级,终止和启动进程等。

进程一般由四个部分组成:

  1. 已分配的内存地址空间
  2. 安全属性,包括所有权凭据和特权
  3. 程序代码的一个或者多个执行进程
  4. 进程的状态

进程的状态一般有三种:

  1. 就绪状态
  2. 执行状态
  3. 阻塞状态

三种状态的转换如图:
【linux】循序渐进学运维-基础篇-进程管理
简单了解了进程之后,我们来看看进程的属性:

2. 进程的属性

进程ID(PID) : 这是用来区分进程的唯一标识
父进程的ID : PPID
进程的状态: 运行(R),休眠(s)和僵尸(z)
centos6 系统启动后的第一个进程是init, PID 是1.
centos7 PID 为1的进程是systemd

3. 关于僵尸进程

僵尸进程: 一个进程使用fork创建子进程后,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述仍然保存在系统中。这种进程就是僵尸进程。

任何一个子进程(init除外) 在exit() 之后,并非马上消失,而是留下一个称之为僵尸进程的数据结构,等待父进程处理。如果这时候父进程没有来的及处理,我们用ps命令就会看到大写的Z的进程。 如果子进程结束前,父进程已经退出,这时候的子进程由init接管。 init会以父进程的身份对僵尸进程进行处理。

Linux管理的基本命令

1. ps命令

1) 常用参数:
选项 作用
a 显示现行终端机下的所有进程,包括其他用户的进程;
u 显示进程拥有者、状态、资源占用等的详细信息(注意有“-”和无“-”的区别);
x 显示没有控制终端的进程。通常与 a 这个参数一起使用,可列出较完整信息;
e 显示所有进程;
f 完整输出显示进程之间的父子关系;
l 较长、较详细的将该 PID 的的信息列出;
o 自定义显示的字段;
2)常用组合
a) ps -aux

【linux】循序渐进学运维-基础篇-进程管理
注: 最后一列[xxxx] 使用方括号括起来的进程是内核态的进程。 没有括起来的是用户态进程

b) ps-uax输出的各个参数的含义如图:
参数 含义
USER: 启动这些进程的用户
PID 进程的ID
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
VSZ 进程占用的虚拟内存大小(单位:KB)
RSS 进程占用的物理内存大小(单位:KB)
STAT 该程序目前的状态
START 该 process 被触发启动的时间;
TIME process 实际使用 CPU 运作的时间。
COMMAND 该程序的实际指令
c) Linux进程有5种基本状态:
R |该程序目前正在运作,或者是可被运作;
S |该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T |该程序目前正在侦测或者是停止了;
 Z |该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
D  |不可中断状态.

除了这5中状态外还有一些延伸的状态:

【linux】循序渐进学运维-基础篇-进程管理

可以看到在S后面还有个小s, 或者有< 这类的拓展状态 ,这些标记表示:

符号 含义
< 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台

3) 举例

a) 进程状态查看

打开一个进程:
【linux】循序渐进学运维-基础篇-进程管理
在另一个终端查看:
【linux】循序渐进学运维-基础篇-进程管理

注: 此处显示的是S,睡眠状态,+表示在前台。 意思是 在前台睡眠状态。如果我们把他调到后台运行会怎么样呢?
【linux】循序渐进学运维-基础篇-进程管理
查询结果为T: T表示出于停止状态
【linux】循序渐进学运维-基础篇-进程管理

b) ps的使用方法 -ef

ps -ef
-e 显示所有进程
-f 显示完整格式输出
【linux】循序渐进学运维-基础篇-进程管理
此处包含的信息和ps -aux 不同,我们来看一下具体的含义:

参数 含义
UID 启动这些进程的用户
PID 进程的ID
PPID 父进程的进程号
C 进程生命周期中的CPU利用率
STIME: 进程启动时的系统时间
TTY 表明进程在哪个终端设备上运行。如果显示 ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
TIME: 运行进程一共累计占用的CPU时间
CMD: 启动的程序名称
c) 根据cpu/内存来升序排序

[root@zmgaosh log]# ps -aux --sort pcpu |less
[root@zmgaosh log]# ps -aux --sort pmem |less

补充:

使用PS实时监控进程状态
[root@zmgaosh log]# watch -n 1 ‘ps -aux --sort -pmem,-pcpu’

总结:

ps uax 和ps -ef 两者的输出结果差别不大,只是展示结果不同
aux是BSD风格, -ef是System风格, 更重要的是aux会截断command列。

我是高胜寒,一个在教培行业不忘初心的人, 关注我,一起学习,欢迎点赞收藏,我们下篇文章再见!

上一篇:Linux ps -ef和ps aux的区别


下一篇:记一次僵尸进程的处理