本小章讲解进程管理中的进程概览和作用,及ps命令详解,ps -ef,ps aux,ps -le,ps -l的输出详解和示例


文章目录


进程概览

什么是进程和程序

进程是正在执行的一个程序或命令,每个进程都有自己的地址空间,并占用一定的资源。

程序是人为使用计算机语言编写的,实现特定目标或解决特定问题的代码集合。

进程是正在执行中的程序。当程序被执行时,执行人的权限和属性,以及程序的代码都会被加载入内存,操作系统给这个进程分配一个 ID(pid)。

进程可能会产生一些新的进程,把这些进程称作子进程,而把这个进程本身称作父进程。比如,正常登录到 Shell 环境中才能执行系统命令,Linux 的标准 Shell 是 bash。我们在 bash 当中执行了 ls 命令,那么 bash 就是父进程,而 ls 命令是在 bash 进程中产生的进程,所以 ls 进程是 bash 进程的子进程。

子进程是依赖父进程而产生的,如果父进程不存在,那么子进程也不存在了。

进程管理的作用

进程管理通常作用三方面。



判断服务器的状态
运维最主要的工作就是保证服务器安全、稳定地运行。
进程管理主要工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的 CPU 占用率、内存占用率过高,可能就需要人为介入。
如果服务器数量很少,可以人为进行干预,但如果服务器数量较多,就需要相应的监控服务,如 Prometheus或 zabbix。



查看系统中所有的进程
查看看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务、是否有非法服务在运行。



杀死进程
当需要停止服务时,会通过正确关闭命令来停止服务。当无法正常关闭服务时候,会考虑使用 kill 命令杀死进程。



进程启动方式

每个进程有一个唯一的进程号(PID),启动一个进程主要有 2 种途径,分别是通过手工启动和通过调度启动。手工启动包括前台手工启动和放到后台执行。

僵尸进程

僵尸进程。僵尸进程产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。

僵尸进程会对主机的稳定性产生影响,所以,在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后强制中止。

ps详解

ps查看正在运行的进程

ps: process status,最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。

语法选项

选项:


  • a:显示所有进程包括 用户启动的进程;
  • u:显示进程的归属用户及内存的使用情况;
  • x:显示没有控制终端的进程;
  • -l:长格式显示更加详细的信息;
  • -e:显示所有进程;
  • -f: 显示用户id,进程id,父进程id,最近CPU使用情况,进程开始时间等等

ps 命令的基本格式如下:

[root@localhost ~]# ps aux
#查看系统中所有的进程,使用 BS 操作系统格式
[root@localhost ~]# ps -le
#查看系统中所有的进程,使用 Linux 标准命令格式

例如:

“ps aux” 可以查看系统中所有的进程;

“ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;

“ps -l” 只能看到当前 Shell 产生的进程;

ps -ef 输出详解

[root@zaishu ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:10 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 11:10 ? 00:00:00 [kthreadd]
root 3 2 0 11:10 ? 00:00:00 [kworker/0:0]
root 4 2 0 11:10 ? 00:00:00 [kworker/0:0H]
root 5 2 0 11:10 ? 00:00:00 [kworker/u256:0]
root 6 2 0 11:10 ? 00:00:00 [ksoftirqd/0]
....

其中各列的内容意思如下


  • UID //输出的是用户名
  • PID //进程的ID
  • PPID //父进程ID
  • C //进程占用CPU的百分比
  • STIME //进程启动到现在的时间
  • TTY //该进程在那个终端上运行,?表示与终端无关; 若为pts/0等,则表示由远程网络连接终端。
  • CMD //执行的命令进程

ps aux输出详解

[root@zaishu ~]# ps aux
查看系统中所有的进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.3 125376 3832 ? Ss 11:10 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 11:10 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 11:10 0:00 [kworker/0:0]
root 4 0.0 0.0 0 0 ? S< 11:10 0:00 [kworker/0:0H]
root 5 0.0 0.0 0 0 ? S 11:10 0:00 [kworker/u256:0]
root 6 0.0 0.0 0 0 ? S 11:10 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 11:10 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 11:10 0:00 [rcu_bh]
root 9 0.1 0.0 0 0 ? R 11:10 0:00 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 11:10 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 11:10 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S 11:10 0:00 [kdevtmpfs]
...

  • USER 该进程是由哪个用户产生的。
  • PID 进程的 ID。
  • %CPU 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
  • %MEM 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
  • VSZ 该进程占用虚拟内存的大小,单位为 KB。
  • RSS 该进程占用实际物理内存的大小,单位为 KB。
  • TTY 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端,pts/0 ~ 255 代表远程连接终端,?表示与终端无关。
  • STAT 进程状态。常见的状态有以下几种:


  1. D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
  2. R:该进程正在运行。
  3. S:该进程处于睡眠状态,可被唤醒。
  4. T:停止状态,可能是在后台暂停或进程处于除错状态。
  5. W:内存交互状态。
  6. X:死掉的进程。
  7. Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
  8. <:高优先级。
  9. N:低优先级。
  10. L:被锁入内存。
  11. s:包含子进程。
  12. l:多线程。
  13. +:位于后台。


  • START 该进程的启动时间。
  • TIME 该进程占用 CPU 的运算时间,注意不是系统时间。
  • COMMAND 产生此进程的命令名。

ps -le 输出详解

ps -le也能看到系统中所有的进程。-l能够看到更加详细的信息

[root@zaishu ~]# ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 31344 ep_pol ? 00:00:01 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
1 S 0 4 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
1 S 0 5 2 0 80 0 - 0 worker ? 00:00:00 kworker/u256:0
1 S 0 6 2 0 80 0 - 0 smpboo ? 00:00:00 ksoftirqd/0
1 S 0 7 2 0 -40 - - 0 smpboo ? 00:00:00 migration/0
1 S 0 8 2 0 80 0 - 0 rcu_gp ? 00:00:00 rcu_bh
1 R 0 9 2 0 80 0 - 0 - ? 00:00:00 rcu_sched
1 S 0 10 2 0 60 -20 - 0 rescue ? 00:00:00 lru-add-drain
5 S 0 11 2 0 -40 - - 0 smpboo ? 00:00:00 watchdog/0
5 S 0 13 2 0 80 0 - 0 devtmp ? 00:00:00 kdevtmpfs
1 S 0 14 2 0 60 -20 - 0 rescue ? 00:00:00 netns
1 S 0 15 2 0 80 0 - 0 watchd ? 00:00:00 khungtaskd
1 S 0 16 2 0 60 -20 - 0 rescue ? 00:00:00 writeback
1 S 0 17 2 0 60 -20 - 0 rescue ? 00:00:00 kintegrit
.....

  • F 进程标志,说明进程的权限,常见的标志有两个:
    1:进程可以被复制,但是不能被执行;
    4:进程使用超级用户权限;
  • S 进程状态。


  1. D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
  2. R:该进程正在运行。
  3. S:该进程处于睡眠状态,可被唤醒。
  4. T:停止状态,可能是在后台暂停或进程处于除错状态。
  5. W:内存交互状态。
  6. X:死掉的进程。
  7. Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
  8. <:高优先级。
  9. N:低优先级。
  10. L:被锁入内存。
  11. s:包含子进程。
  12. l:多线程。
  13. +:位于后台。


  • UID 进程的用户的 ID;
  • PID 进程的 ID;
  • PPID 父进程的 ID;
  • C 该进程的 CPU 使用率,单位是百分比;
  • PRI 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;
  • NI 进程的优先级,数值越小,该进程越早被执行;
  • ADDR 该进程在内存的哪个位置;
  • SZ 该进程占用多大内存;
  • WCHAN 该进程是否运行。"-"代表正在运行;
  • TTY 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端,pts/0 ~ 255 代表远程连接终端,?表示与终端无关。
  • TIME 该进程占用 CPU 的运算时间,注意不是系统时间;
  • CMD 产生此进程的命令名;

ps -l 查看当前会话进程

只查看当前登录会话的进程,使用ps -l:

[root@zaishu ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1309 1307 0 80 0 - 28920 do_wai pts/0 00:00:00 bash
0 R 0 1333 1309 0 80 0 - 38332 - pts/0 00:00:00 ps

当前终端是 pts/0 虚拟终端,只产生了两个进程:一个是登录生成的 Shell,也就是 bash;另一个是正在执行的 ps 命令。


总结

本小章讲解进程管理中的进程概览和作用,及ps命令详解,ps -ef,ps aux,ps -le,ps -l的输出详解和示例