查看进程
ps命令-查看静态进程统计信息(processes Statisic)
用于显示当前运行的进程的完整信息的静态状态。
基本语法:
ps [options]
#ps 选项
通用选项
-A
或--all
:显示所有进程的信息。-a
:显示终端中除会话领导进程外的所有进程,同时包括其他用户的进程。(于x选项结合时将显示系统中所有的进程信息。)-e
:等同于-A
,显示所有进程的信息。-f
:显示完整格式,包括父进程PID、控制终端、优先级、内存使用情况等。-l
或--long
:使用长格式输出,显示更多的进程信息。-u
或--user
:显示属于指定用户的进程,如果没有参数则默认为当前用户。-x
:显示没有控制终端的进程。
输出格式控制
-o
:自定义输出格式,例如ps -o pid,ppid,command
将只显示PID、PPID和命令名称。
--sort
:按照特定列排序输出,例如--sort -%mem
将按内存使用率降序排列。
进程状态标识
每个列标题的含义:
- USER: 执行该进程的用户名。
- PID: 进程ID(Process ID),唯一标识符。
- %CPU: 此进程占用的CPU百分比。
- %MEM: 此进程使用的物理内存占总可用内存的比例。
- VSZ: 此进程使用的(swap)虚拟内存大小(单位:KB)。
- RSS: 此进程使用(物理内存)的常驻集大小(Resident Set Size),即实际分配到物理内存的部分(不包含交换空间)。
- TTY: 终端类型,表明该进程在那个终端上运行。通常为
?
表示非交互式进程(未知或不需要终端)。- STAT: 进程的状态,状态标识符
R
:运行状态,表示进程正在运行或者在运行队列中等待。s: 睡眠状态”(sleeping),具体取决于上下文和使用的系统或程序。在一些系统中,小写的
s
可能特指进程是睡眠状态并且不可中断(stopped)
S
:休眠状态,进程在等待事件唤醒。<:意味着该进程具有高优先级(High-Priority)。
这意味着进程被标记为实时进程或具有比普通进程更高的优先级。
(
<
字符通常会与其他状态字符组合在一起,例如R<
表示进程正在运行且具有高优先级。这样可以快速识别出哪些进程因为其特殊属性而可能对系统资源有更高或更紧急的需求。)N:低优先级
+:前台进程。
D
:不可中断的睡眠状态,通常表示进程正在等待I/O操作完成。
T
:停止状态,进程被停止,可能是接收到SIGSTOP信号。
Z
:僵尸状态,子进程已经结束但父进程尚未读取其退出状态。(应该以手动终止。)
- START: 进程启动的时间。
- TIME: 进程已使用的CPU时间。
- COMMAND: 启动此进程的命令或程序名。
例如:输出信息中包括对应进程的父进程的pid号。
ps elf
top命令-查看进程动态信息
top命令提供了一个动态实时的视图,显示了系统中最消耗资源的进程。你可以按 P
键按照CPU使用率排序,按 M
键按照内存使用率排序。提供了关于 CPU 使用率、内存使用情况、运行时间、优先级等的信息。top
命令以动态更新的方式显示这些信息,使用户能够实时监控系统的状态。
基本用法
当你在终端中输入 top
命令并按回车后,你会看到一个类似下面的输出:
top - 19:00:05 up 3 days, 14:39, 1 user, load average: 0.46, 0.57, 0.58
Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16165180 total, 14672144 free, 464496 used, 1028540 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 15096840 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
123 root 20 0 124780 11816 7404 S 0.0 0.1 0:00.00 sshd
456 user1 20 0 111584 9404 7164 S 0.0 0.1 0:00.00 bash
输出解释
- 第一行 显示系统运行时间、登录用户数和平均负载。
- 第二行 显示任务总数、正在运行的任务数、休眠的任务数、停止的任务数和僵尸进程数。
- 第三行 显示 CPU 使用情况,包括用户态、内核态、空闲时间等。
- 第四行和第五行 分别显示物理内存和交换空间的使用情况。
- 第六行及以下 列出系统中的进程,包括 PID、用户、优先级、虚拟内存大小、实际使用的物理内存大小、共享内存大小、进程状态、CPU 使用率、内存使用率、累计运行时间和命令名。
上述输出信息中,开头的部分显示了系统任务 (Tasks)、CPU 占用、内存占用 (Mem)、 交换空
间 (Swap) 等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下。
> 系 统 任 务 (Tasks) 信息:total, 总进程数;runing, 正在运行的进程数;sleeping,休眠的 进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
>CPU 占用信息:us, 用户占用;sy, 内核占用;ni, 优先级调度占用;id, 空闲 CPU,wa, I/0 等待占用;hi, 硬件中断占用;si, 软件中断占用;st, 虚拟化占用。要了解空闲的CPU 百分比,主要看%id部分。
内存占用 (Mem) 信息:total, 总内存空间;free,空闲内存;used, 已用内存;buff/cache, 物理内存和交换内存的缓冲区总和。
交换空间 (Swap) 占用:total, 总交换空间;free, 空闲交换空间;used,已用交换空间; avail Mem,可用物理空间。
常用操作
- q:退出
top
- P:按照 CPU 使用率排序
- M:按照内存使用率排序
- Shift + P:按进程 ID 排序
- Ctrl + L:清除屏幕
- 数字键:切换到特定的 CPU 核心视图(在多核系统中)
- f 或 F:进入字段选择模式,可以自定义显示哪些列
- s 或 S:设置更新间隔时间(秒)
进阶功能
top
还有更多高级功能,如过滤进程、改变排序方式、自定义显示的列等。你可以通过输入 h
查看帮助信息,或者查看 man top
获取更详细的文档和选项。
htop
命令
类似于 top
,是一个增强版的 top
命令,但是提供了更友好的界面和更多的功能,比如颜色编码、虚拟键盘等。不过,htop
并不是默认安装在所有Linux发行版上的,可能需要先安装。
htop
提供了一个更加直观和交互式的界面,使得系统监控和进程管理变得更加容易。htop
的一些主要特点包括:
- 彩色输出:
htop
使用颜色高亮显示不同的信息,比如 CPU 使用率、内存使用率等,使得关键数据更容易识别。 - 滚动历史记录:用户可以向上或向下滚动来查看过去几秒内的进程列表变化,这对于调试和性能分析非常有用。
- 自定义列:用户可以自由选择想要显示的列,如进程 ID、用户名、CPU 使用率、内存使用率等。
- 键盘导航:使用方向键或鼠标可以方便地在进程列表中移动和选择。
- 进程搜索:用户可以通过输入部分进程名称快速找到特定的进程。
- 进程操作:可以直接在
htop
界面中发送信号给进程,比如终止(kill)、挂起(suspend)等。 - 资源使用概览:除了进程列表,
htop
还提供了一个顶部面板,显示整个系统的资源使用情况,包括 CPU、内存、交换空间等。
如何安装 htop
在大多数 Linux 发行版中,htop
可以通过包管理器轻松安装。例如,在 Ubuntu 和 Debian 上,可以使用以下命令:
sudo apt-get update
sudo apt-get install htop
在 CentOS 和 RHEL 上,可以使用:
sudo yum install htop
或者在 Fedora 上:
sudo dnf install htop
基本使用
启动 htop
很简单,只需在终端输入 htop
命令即可。一旦进入 htop
界面,你可以使用以下快捷键进行操作:
- 方向键:上下左右移动光标,选择不同的进程。
- Enter:进入选定进程的详细信息页面。
- F2:编辑
htop
的配置,包括显示的列、颜色等。 - F3:改变进程列表的排序依据。
- F9:发送信号给进程,比如 SIGKILL (9) 终止进程。
- F10:退出
htop
。 - Space:暂停或继续进程列表的实时刷新。
- ?:显示所有可用的快捷键和命令的帮助信息。
htop
提供了比 top
更加丰富和友好的用户界面,尤其适合那些需要频繁监控和管理系统进程的用户。
pgrep
命令-查询进程信息
用于搜索与给定模式匹配的进程。查找并显示与指定条件匹配的进程的 PID(进程标识符)。与 ps
命令相比,pgrep
提供了一种更直接的方法来搜索正在运行的进程,特别是当你要找的是特定名称的进程时。
基本语法
pgrep [选项] [模式]
常用选项
-l
或--list
: 显示完整的命令行而不是仅显示 PID。-u
或--user
: 限制搜索到指定用户运行的进程。-U
或--Uid
: 类似于-u
,但是使用 UID 而不是用户名。-g
或--group
: 限制搜索到指定组运行的进程。-G
或--Gid
: 类似于-g
,但是使用 GID 而不是组名。-f
或--full
: 在模式匹配时考虑整个命令行,而不仅仅是命令名。-n
或--niceseq
: 按照 nice 值的顺序输出 PID。-x
或--exact
: 匹配完整的命令名,而不是包含子字符串。
示例
查找名为 sshd 的进程 PID:
pgrep sshd
列出完整命令行的 sshd 进程:
pgrep -l sshd
查找由特定用户(如 www-data)运行的 sshd 进程:
pgrep -u www-data sshd
查找包含 nginx 字符串的进程:
pgrep nginx
精确查找名为 nginx 的进程(而非包含 nginx 字符串的任何进程):
pgrep -x nginx
查找包含 nginx 字符串的完整命令行:
pgrep -f nginx
结合 -U -t
还可结合“-U”选项查询特定用户的进程、“-t”选项查询在特定终端运行的进程。例如,若要 查询由用户root 在xshell终端上运行的进程及PID号,可以执行以下操作:
pgrep -1 -U root -t xshell
pgrep
命令非常实用,尤其是在自动化脚本中,可以用来检查特定服务是否正在运行,或者在需要对特定进程进行操作(如 kill 或 signal)时获取其 PID。
pstree 命令——查看进程树
以树状结构展示进程间的关系。更加直观地判断各进程之间的相互 关系(父进程、子进程)。它以一种清晰易读的格式显示进程的层次结构,其中每个进程都是另一个进程的子进程。这有助于理解系统上运行的进程以及它们是如何相互关联的。
pstree 命令默认情况下只显示各进程的名称,结合“-p”选项使用时可以 同时列出对应的PID号,结合“-u”选项可以列出对应的用户名,结合“-a”选项可以列出完整的命令信息。
基本语法
pstree [选项] [PID]
常用选项
-p
或--pid
: 显示每个进程的 PID。-u
或--uid
: 显示每个进程的用户 ID。-a
或--all
: 显示完整的命令行参数,包括进程的环境变量。-l
或--list
: 以列表形式显示进程,而不是树形结构。-s
或--sessions
: 按会话分组进程。-h
或--header
: 在输出的开头显示一个头部,包括用户名、PID、状态和命令。-c
或--color
: 使用颜色来突出显示不同类型的进程。-n
或--numbers
: 使用数字代替用户和组的名字。-x
或--ppid
: 显示每个进程的父进程的 PID。-H
或--forest
: 如果一个进程有多个父进程,显示每个父进程下的子树。
示例
显示当前会话领导者的进程树:
pstree
显示当前会话领导者的进程树,并包含 PID:
pstree -p
显示特定进程的子树,例如 PID 为 1 的进程(通常是 init 或 systemd):
pstree 1
显示包含完整命令行参数的进程树:
pstree -a
显示包含颜色高亮的进程树:
pstree -c
查看当前系统的进程树,包括各进程对应的PID号、 用户名、完整命令等信息。
pstree -aup
只查看属于指定用户的进程树结构
只要指定用户名作为参数即可。 例如,执行以下操作可以列出由用户 root打开的进程及子进程的树结构。
pstree -ap root
pkill
或 killall
命令:
命令用于终止特定的进程。
例如,要杀死所有名为 nginx
的进程
pkill nginx
或者
killall nginx
挂起进程(Suspended Process)
挂起进程(Suspended Process)是指那些被暂停执行的进程。在Linux和其他类UNIX操作系统中,进程可以处于多种状态,包括运行、就绪、等待、僵尸等,而挂起状态是其中一种特殊的停止状态。挂起进程有两种主要类型:可追踪的挂起(Stopped)和不可中断的睡眠(Uninterruptible Sleep),但通常我们讨论的挂起进程指的是前一种状态。
挂起进程的运行方式
-
通过信号挂起: 进程可以通过接收到特定信号(如SIGSTOP, SIGTSTP)而被挂起。这些信号通常由用户或其他进程发送,用于暂停进程的执行。一旦进程被挂起,它将不再占用CPU资源,直到被其他信号(如SIGCONT)恢复。
-
通过终端控制挂起: 当一个进程在终端中运行时,用户可以通过按下组合键(如Ctrl+A然后按D,或者Ctrl+Z)来挂起当前的前台进程。这种情况下,进程会被暂停,等待进一步的指令。
-
通过系统调度器: 系统调度器也可以将进程挂起,这通常发生在进程需要等待某种资源(如I/O操作完成)的时候。此时,进程将进入不可中断的睡眠状态,直到所需的资源可用。
恢复挂起进程
要恢复一个挂起的进程,可以向它发送SIGCONT信号,这通常可以通过在终端中使用fg
命令(如果进程是在终端中挂起的)或通过编写脚本来实现。
挂起进程的影响
- 资源节约:挂起进程不会消耗CPU时间,有助于节省系统资源。
- 调试便利:对于开发和调试,能够挂起进程检查其状态或修改其内存是非常有用的。
- 任务管理:允许用户或系统根据需要控制进程的执行,提高系统的可控性和响应性。
查看后台的进程
使用jobs
命令:
如果你在shell中启动了后台进程(使用&
),你可以使用jobs
命令查看当前shell中的后台作业状态:
结合“-I”选项可以同时 显示该进程对应的 PID号。在jobs命令的输出结果中,每一行记录对应一个后台进程的状态信息, 行首的数字表示该进程在后台的任务编号。若当前终端没有后台进程,将不会显示任何信息。
jobs
恢复后台进程运行
1. 从挂起状态恢复进程
当你在终端中使用如Ctrl + Z
将一个正在运行的进程挂起时,该进程会变成暂停状态。你可以使用以下命令来恢复这个进程:
使用bg
命令:将最近一次暂停的进程放到后台继续运行。
bg %1 # 其中%1表示最近一次暂停的作业
使用fg
命令:将最近一次暂停的进程放到前台继续运行,会重新获取终端的控制
fg %1 # 同样,%1表示最近一次暂停的作业
如果你有多个挂起的作业,你可以使用jobs
命令列出它们,然后使用bg %n
或fg %n
来指定恢复哪一个作业,其中n
是作业编号。
2. 将后台进程带到前台
如果你之前将一个进程放到后台运行(使用&
),并且现在想将它带到前台,你可以使用fg
命令加上进程的作业标识符:
fg %n # 其中%n是作业的编号,可以通过`jobs`命令查看
使用nohup
和disown
如果你使用nohup
命令启动了一个进程,该进程会在你退出终端后继续在后台运行。如果你想将这个进程重新带回终端,你需要先找到它的PID,然后使用kill
或killall
命令向它发送SIGCONT信号:
kill -CONT <PID>
或者
killall -CONT <command_name>
但是,通常nohup
启动的进程是为了让它独立于终端运行,所以通常不会将其带回前台。如果你想要完全脱离终端控制,可以在启动进程后使用disown
命令:
disown %n # 其中%n是作业编号
这样,即使你关闭了终端,进程也会继续运行。
终止进程执行
使用kill
命令: kill
命令是最常用的终止进程的方式。它发送一个信号给指定的进程ID(PID)。默认情况下,kill
命令发送SIGTERM信号,这会给进程一个机会去清理资源并优雅地退出。例如,如果进程的PID为1234,你可以使用:
kill 1234
或者显式地指定信号:
kill -SIGTERM 1234
使用killall
命令: 如果你知道进程的名称而不是PID,killall
命令会更加方便。它会查找并终止所有与指定名称匹配的进程。例如,要终止所有名为httpd
的进程,你可以使用:
killall httpd
强制终止进程: 如果进程不响应SIGTERM信号,你可以使用SIGKILL信号来强制终止进程,这通常没有机会让进程进行清理。例如:
kill -9 1234
或者
kill -SIGKILL 1234
使用pkill命令终止进程
使用pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定 的进程,大部分选项与 pgrep 命令基本类似,如“-U” (指定用户)、“-t” (指定终端)等选项,使用 起来非常方便。
例如,若要终止由用户jingyu 启动的进程(包括登录 Shell),可以执行以下操作。
[root@localhost~]# pgrep -1 -U "jingyu" #//确认目标进程相关信息
1610 bash
[root@localhost ~]# pkill -9-U "jingyu" #//强行终止用户jingyu的进程
[root@localhost~]# pgrep-1 -U "jingyu" #//确认目标进程已被终止
-
通过终端控制: 如果进程是由终端启动的,你还可以通过在终端中发送信号来尝试终止进程。例如,使用
Ctrl+C
通常会向进程发送SIGINT信号,而Ctrl+\
则发送SIGQUIT信号。 -
使用图形界面的系统监控工具: 在图形界面下,你也可以使用如
System Monitor
或gnome-system-monitor
等工具来终止进程。这些工具提供了一个直观的界面,你可以选择要终止的进程并点击“结束”或类似按钮。