【命令行程序】ps 查看系统进程

2024-02-10 00:00:00

目录:

进程介绍

啥玩意是进程?

启动一个程序,至少会运行一个进程,有些程序如谷歌浏览器会运行多个进程。

为啥看进程?

直接查看进程列表,就知道系统运行了哪些程序。

为什么需要使用命令查看进程?

像 Windows 和 MacOS 这种有桌面的系统,在桌面最下面看有哪些应用小图标就可以直观看到运行了哪些程序。

但是对于没有桌面的远程服务器,只能通过终端去连接,这个想看系统运行哪些程序,就需要敲命令查看了。

比较常见的一个使用场景:

在服务器上想要干掉某个正在运行的程序,可以使用 ps 命令找到这个程序对应的进程 ID,然后敲 kill -9 <进程ID> 就可以中止这个程序了。

ps 介绍

ps 命令用于显示系统中进程的静态状态信息(动态监控需使用top命令)。

输入 ps 命令,可以看到与当前 shell 相关的进程,展示的信息比较简洁。

$ ps
  PID TTY           TIME CMD
 8970 ttys000    0:00.58 -bash
59398 ttys001    0:00.04 -bash
52943 ttys003    0:05.13 hexo

介绍下每一列的含义:

  • PID:进程的唯一 ID 号,用于管理进程(如结束进程,上面提过哦😯);
  • TTY:进程所在的终端。pts/0 表示伪终端;
  • TIME:进程累计占用 CPU 的时间;
  • CMD:启动该进程的命令,完整的运行命令需要看 COMMAND 列。

输入 ps aux 显示所有用户的进程详细信息,展示的信息非常详细。

其中:

  • a 显示所有用户的进程;
  • u 以面向用户的格式显示进程信息;
  • x 显示没有控制终端的进程,例如后台运行的守护进程。
$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.4 239456  7256 ?        Ss    2025  53:42 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root           2  0.0  0.0      0     0 ?        S     2025   0:03 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<    2025   0:00 [rcu_gp]

介绍下每一列的含义:

  • USER:哪个用户运行了这个进程;
  • PID:进程的唯一 ID 号,用于管理进程(如结束进程,上面提过哦😯);
  • %CPU:CPU 占用百分比,用于发现资源消耗大的程序;
  • %MEM:内存占用百分比,用于发现资源消耗大的程序;
  • TTY:进程所在的终端;
  • STAT:进程状态码;(下面详细介绍)
  • START:进程启动时间。
  • TIME:进程累计占用 CPU 的时间;
  • COMMAND:完整的命令行。

其中 STAT 列非常重要,它用单个或多个字符表示进程的实时状态,重点关注 Z 状态。

  • R (Running):进程正在运行或在队列中等待运行;
  • S (Sleeping):进程在睡眠(等待某事件完成),可被唤醒;
  • D:不可中断的睡眠(通常是在等待磁盘I/O);
  • T (Stopped):进程被暂停(如按下了Ctrl+Z);
  • Z (Zombie):僵尸进程。进程已结束,但其父进程尚未回收资源;
  • <:高优先级进程;
  • N:低优先级进程;
  • s:该进程是会话领导者(session leader);
  • l:多线程进程;
  • +:进程在前台运行。

分页查看进程信息

直接输入 ps aux 有时输出内容过长、一屏无法完整显示。

可以使用 less 命令分页查看,空格键向下翻页,b 向上翻页,q 退出分页返回命令行。

$ ps aux | less

按 CPU 使用率降序排列

在网站访问量突增导致 CPU 占用过高时,是快速定位问题进程的首选命令。

# 按 CPU 降序
$ ps aux --sort=-%cpu | head -20

按内存使用率降序排列

对于排查内存泄漏或优化内存配置非常有用。

# 按内存降序
$ ps aux --sort=-%mem | head -20

查看指定用户的进程

# 使用用户名称查询
$ ps -u root
# 使用 UID
$ ps -u 0

查看指定程序的进程

$ ps -C nginx
# 或者使用 grep
$ ps | grep nginx

查看指定进程号的进程

$ ps -p 1234,5678

自定义显示列

使用 -o 选项可以自由选择想显示的列。

# 只显示 PID、用户名和命令
$ ps -o pid,user,command
# 显示进程的安全信息,如启动用户和完整参数
$ ps -o pid,user,%cpu,%mem,args

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: