31.进程管理之进程讲解,及ps命令详解,ps -ef,ps aux,ps -le,ps -l输出详解和示例

本小章讲解进程管理中的进程概览和作用,及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的输出详解和示例

上一篇:LeetCode:2.两数相加(add two numbers)Java完整代码


下一篇:P28 PreparedStatement练习题