这些命令允许你查看、监视和控制 Linux 系统上运行的进程。这对确定资源使用情况和停止行为不端的程序非常有用。
1. ps – 报告当前进程概览
使用ps,您可以查看当前shell会话正在运行的进程。它打印有关正在运行的程序的有用信息,如进程ID、TTY(电传打字机)、时间和命令名。
[root@xx web]# ps
PID TTY TIME CMD
55558 pts/0 00:00:00 ps
94925 pts/0 00:00:01 bash
常用选项:
- e:显示所有进程,而不仅仅是当前用户的进程。
- f:显示完整的进程信息,包括进程之间的关系。
- l:使用长格式显示进程信息,包括更多的列和详细信息。
- u:显示与指定用户相关的进程。
- p:显示指定进程ID的进程信息。
- a:显示终端上的所有进程,包括本地和远程的进程。
- x:显示没有控制终端的进程。
使用案例:
- 查看所有进程:ps aux 命令用于显示所有用户的进程信息,包括进程的PID、用户、CPU使用情况、内存使用情况等。这是最常用的 ps 命令格式之一。
- 查找特定进程:ps -ef | grep <process_name> 命令用于查找特定名称的进程。通过结合 grep 命令,您可以轻松找到与特定进程名相关的信息。
- 查看进程树:ps --forest 命令可显示进程之间的父子关系树形图。如果您想了解进程的层次结构和相互关系,这将非常有用。
- 查看用户进程:ps -u 命令用于列出特定用户的进程信息。这对于管理员监控用户的进程活动和资源消耗非常有帮助。
- 查看特定进程的详细信息:ps -p -f 命令用于获取特定进程的详细信息,包括进程启动时间、父进程ID、CPU使用情况和命令行参数等。
怎么使用ps --forest
查看整个进程树:
ps --forest
上述命令将显示整个进程树,以树状图的形式展示父子进程的关系。
显示详细信息并展示进程树:
ps --forest -f
上述命令将显示进程树,并提供完整的进程信息,包括进程状态、资源使用情况等。
显示特定用户的进程树:
ps --forest -u username
将以树状图形式显示指定用户的进程树。
定向输出:
ps --forest > processes.txt
上述命令将将进程树输出到名为 “processes.txt” 的文件中,您可以将其用作后续处理或记录进程信息的参考。
结合选项使用:
[root@xx web]# ps -ef | grep php-fpm
root 19427 94925 0 03:57 pts/0 00:00:00 grep --color=auto php-fpm
apache 21847 44389 0 2023 ? 00:00:00 php-fpm: pool www
root 44389 1 0 2023 ? 00:02:14 php-fpm: master process (/etc/php-fpm.conf)
apache 44390 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44391 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44392 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44393 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44394 44389 0 2023 ? 00:00:00 php-fpm: pool www
[root@xx web]# ps --forest -f
UID PID PPID C STIME TTY TIME CMD
root 94925 94920 0 Jan09 pts/0 00:00:01 -bash
root 57259 94925 0 13:37 pts/0 00:00:00 \_ ps --forest -f
[root@xx web]# ps --forest -u apache -f
UID PID PPID C STIME TTY TIME CMD
apache 21847 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44394 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44393 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44392 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44391 44389 0 2023 ? 00:00:00 php-fpm: pool www
apache 44390 44389 0 2023 ? 00:00:00 php-fpm: pool www
[root@xx web]# ps -p 21847 -f
UID PID PPID C STIME TTY TIME CMD
apache 21847 44389 0 2023 ? 00:00:00 php-fpm: pool www
如果您想要更具交互性的内容,可以使用htop。
2. top – 显示 Linux 进程
top 命令显示实时 Linux 进程信息,包括 PID、用户、CPU %、内存使用率、运行时间等。与 ps 不同的是,它会动态更新显示内容,以反映当前的使用情况。
输入top显示内容如下:
- 第一行:系统时间和运行时间
- 第二行:任务总数
- 第三行:CPU使用率
- 第四行:内存使用情况
- 第五行:交换空间使用情况
- 进程列表:包含进程的详细信息,如进程ID、进程所有者、优先级、虚拟内存大小、物理内存大小、状态、CPU使用率等。
[root@xx web]# top -u apache -n 5
top - 04:13:38 up 49 days, 1:25, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 118 total, 1 running, 71 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
KiB Mem : 1808928 total, 118620 free, 749536 used, 940772 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 716832 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21847 apache 20 0 277896 18336 11256 S 0.0 1.0 0:00.55 php-fpm
44390 apache 20 0 278036 18620 11444 S 0.0 1.0 0:00.72 php-fpm
44391 apache 20 0 278040 18688 11508 S 0.0 1.0 0:00.69 php-fpm
44392 apache 20 0 278040 18688 11508 S 0.0 1.0 0:00.70 php-fpm
44393 apache 19 -1 278040 18692 11512 S 0.0 1.0 0:00.71 php-fpm
44394 apache 20 0 278040 18692 11512 S 0.0 1.0 0:00.72 php-fpm
每一行参数代表的意思如下:
- 第一行:系统时间和运行时间
top - 04:13:38 up 49 days, 1:25, 1 user, load average: 0.00, 0.00, 0.00
top -:表明这是"top"命令的输出。
04:13:38:当前系统时间。
up 49 days, 1:25:系统已经运行的时间。
1 user:当前登录系统的用户数量。
load average: 0.00, 0.00, 0.00:分别表示最近 1 分钟、5 分钟和 15 分钟的平均负载。
- 第二行:任务总数
Tasks: 118 total, 1 running, 71 sleeping, 0 stopped, 0 zombie
Tasks: 118 total:表示任务总数为 118。
1 running:正在运行的任务数量。
71 sleeping:休眠中的任务数量。
0 stopped:停止的任务数量。
0 zombie:僵尸进程的数量。
- 第三行:CPU使用率
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
%Cpu(s):CPU 使用率的统计信息。
0.3 us:用户空间占用 CPU 的时间百分比。
0.2 sy:内核空间占用 CPU 的时间百分比。
0.0 ni:带有调度优先级的进程占用 CPU 的时间百分比。
99.3 id:CPU 空闲的时间百分比。
0.0 wa:等待 I/O 完成的时间百分比。
0.2 hi:处理硬件中断的时间百分比。
0.0 si:处理软件中断的时间百分比。
0.0 st:用作虚拟化偷取的时间百分比。
- 第四行:内存使用情况
KiB Mem : 1808928 total, 118620 free, 749536 used, 940772 buff/cache
KiB Mem:内存使用情况的统计信息。
1808928 total:总内存大小。
118620 free:可用内存大小。
749536 used:已使用内存大小。
940772 buff/cache:缓存和缓冲区使用的内存大小。
拓展:free查看内存大小,以上等同free -k是以KiB(千字节)为单位,free其他选项-h(人类可读)或 -m(以 MiB 为单位)以及 -g(以 GiB 为单位)。
- 第五行:交换空间使用情况
KiB Swap: 0 total, 0 free, 0 used. 716832 avail Mem
KiB Swap:交换空间使用情况的统计信息。
0 total:总交换空间大小。
0 free:可用交换空间大小。
0 used:已使用交换空间大小。
716832 avail Mem:可用内存大小。
- 进程列表:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程的ID(Process ID)。
USER:进程所属的用户。
PR:进程的优先级。
NI:进程的Nice值。
VIRT:进程使用的虚拟内存大小。
RES:进程使用的物理内存大小。
SHR:进程共享的内存大小。
S:进程的状态。
- R:运行中(Running)
- S:睡眠(Sleeping)
- D:不可中断的睡眠(Uninterruptible sleep)
- Z:僵尸状态(Zombie)
- T:停止(Stopped)
- t:跟踪/调试(Tracing/debugging)
%CPU:进程的CPU使用率。
%MEM:进程的内存使用率。
TIME+:进程所使用的CPU时间(即进程占用的CPU时长/CPU核数(如果是多核CPU,时间是累加的))。例子TIME+ 0:00.55,表示该进程和其子进程的累计 CPU 时间为 0 分钟 0.55 秒。
COMMAND:进程的命令名称。
一些有用的选项:
-
d <秒数>:指定刷新数据的时间间隔。例如,top -d 5 表示每隔5秒更新一次数据。
-
n <次数>:设置 top 命令更新数据的次数,然后自动退出。例如,top -n 10 表示更新数据10次后停止。
-
u <用户名>:只显示指定用户的进程。使用此选项可以仅查看特定用户的进程。例如,top -u myuser 将只显示用户名为 “myuser” 的进程。
-
p <进程ID>:监视指定进程的进程ID(PID)。您可以使用此选项监视单个进程。例如,top -p 1234 将仅监视进程ID为 1234 的进程。
-
o <字段>:按照指定的字段进行排序。使用此选项可以自定义进程排序的方式。例如,top -o %CPU 表示按照 CPU 占用率进行排序。
-
i:忽略空闲进程。使用此选项后,top 命令将仅显示活动进程,过滤掉没有使用 CPU 的空闲进程。例如,top -i。
-
b:以批处理模式运行 top 命令。使用此选项后,top 命令将以无交互方式运行,并将输出保存到文件或通过管道进行处理。例如,top -b > top_output.txt。
-
c:显示完整命令行信息。按下此选项后,top 命令将显示每个进程的完整命令行信息。例如,top -c。
-
s <字段>:以指定字段作为排序依据。使用此选项可以选择另一种排序方式。例如,top -s RES 表示按照内存占用进行排序。
-
E:显示所有线程。按下此选项后,top 命令将显示每个进程及其所有线程的信息。例如,top -E。
例子:
top -u mysql
上述命令只监控 “mysql” 用户的进程。它对识别资源密集型程序很有帮助。
3. htop – 交互式进程浏览器
htop是一种交互式流程查看器,可让您直接从终端管理计算机的资源。在大多数情况下,默认情况下它并没有安装,所以请确保在下载页面上关于它的信息。
只需在命令行中输入 htop,即可查看进程。
htop
其中,右侧参数代表的意思如下:
Tasks: 49,6l thr; running
Load average: 0.01 0.03 0.00
Uptime: 49 days,05:27:44
- Tasks: 49,6l thr:表明当前系统上有49个进程,其中6个是线程(多线程)。
- Load average: 0.01 0.03 0.00:表示系统的平均负载。这通常是一个三个数字的序列,分别代表最近1分钟、5分钟和15分钟内系统的平均负载情况。在这个例子中,系统的平均负载分别为0.01、0.03和0.00。
- Uptime: 49 days,05:27:44:指示系统的运行时间。在这个例子中,系统已经连续运行了49天、5小时、27分钟和44秒。
与 top 相比, htop 的用户界面元素得到了增强,增加了颜色、滚动和鼠标支持,导航更加方便。非常适合调查进程。
以下是一些常用的 htop 参数选项:
-
d 或 --delay <秒数>:设置进程列表的更新延迟时间。默认情况下,htop 的刷新频率为每秒一次。使用此参数可以更改刷新间隔。
-
s 或 --sort-key <关键字>:按指定的关键字对进程列表进行排序。常见的关键字包括CPU使用率(%CPU)、内存使用率(%MEM)、进程ID(PID)等。例如,使用 -s %CPU 可以按照CPU使用率对进程进行排序。
-
p 或 --pid <进程ID>:仅显示指定进程ID的信息。使用此参数可以查看特定进程的详细情况。
-
u 或 --user <用户名>:仅显示指定用户名的进程。使用此参数可以过滤显示属于特定用户的进程。
-
t 或 --tree:以树形结构显示进程列表。这将显示进程之间的层级关系,使您可以更好地理解各个进程的关系。
-
h 或 --help:显示 htop 的帮助信息,包括可用参数和其说明。
以下是一些常用的 htop 快捷键:
-
F1 或 h:显示 htop 的帮助屏幕,其中包含有关可用快捷键的信息。
-
F2 或 S:进入设置界面,允许您自定义 htop 的各种选项,例如排序方式、颜色方案等。
-
F3 或 /:启用进程过滤功能,让您可以根据进程命令行或名称进行快速搜索。
-
F4 或 O:打开进程筛选器,允许您通过选择特定的进程状态(例如运行、僵尸、睡眠等)来筛选进程列表。
-
F5 或 t:切换进程排序方式,可以按照不同的关键字(如CPU使用率、内存使用率等)对进程进行排序。
-
F6 或 <、>:切换排序字段,允许您在排序模式下更改排序关键字。
-
F7 或 {:减少进程树的显示层级,以便更容易查看并定位特定进程。
-
F8 或 }:增加进程树的显示层级,以显示更详细的进程层次结构。
-
F9 或 k:发送信号给选定的进程,例如终止进程或重新启动进程。
-
F10 或 q:退出 htop。
4. kill – 向进程发送信号
当一个程序没有响应,并且你不能用任何方法关闭它时,这是很烦人的。幸运的是,kill命令解决了这类问题。
简单地说,kill向终止它的进程发送一个TERM或kill信号。
您可以通过输入PID(进程ID)或程序的二进制名称来终止进程:
kill 533494
kill firefox
又如:
kill -15 12345
上述命令发送 SIGTERM (15) 信号,以优雅地停止 PID 为 12345 的进程。
一些常用的信号参数数字包括:
- 1:SIGHUP(挂起进程)
- 2:SIGINT(Ctrl+C 发送的中断信号)
- 3:SIGQUIT(进程退出信号)
- 9:SIGKILL(强制终止进程)
- 15:SIGTERM(正常终止进程,也是默认值)
使用此命令时要小心-使用kill时,可能会意外删除您正在执行的工作。
5. pkill – 根据名称向进程发送信号
pkill 命令通过名称而不是 PID 来杀死进程。这比先找到 PID 更容易。
例子:
pkill -9 php-fpm
[root@xx web]# ps -ef | grep php-fpm
root 50615 1 0 08:49 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
apache 50616 50615 0 08:49 ? 00:00:00 php-fpm: pool www
apache 50617 50615 0 08:49 ? 00:00:00 php-fpm: pool www
apache 50618 50615 0 08:49 ? 00:00:00 php-fpm: pool www
apache 50619 50615 0 08:49 ? 00:00:00 php-fpm: pool www
apache 50620 50615 0 08:49 ? 00:00:00 php-fpm: pool www
root 50705 94925 0 08:50 pts/0 00:00:00 grep --color=auto php-fpm
[root@xx web]# pkill -9 php-fpm
[root@xx web]# ps -ef | grep php-fpm
root 50843 94925 0 08:51 pts/0 00:00:00 grep --color=auto php-fpm
这将强制停止所有带有 SIGKILL (9) 的 php-fpm 进程。pkill 通过匹配名称、用户和其他条件而非 PID 来锁定进程。
其他使用参数选项:
使用进程名称终止进程:
pkill process_name
这将终止所有与给定进程名称匹配的进程。
使用正则表达式终止进程:
pkill -f "pattern"
通过使用 -f 参数,可以使用正则表达式模式匹配进程的命令行参数,从而终止匹配的进程。
使用用户名终止进程:
pkill -u username
这将终止属于特定用户的所有进程。
6. nohup – 运行不受挂起影响的命令
nohup
命令的使用使命令或脚本可以在后台持续运行,即使用户退出当前终端会话也不会受到影响。它通常用于长时间运行的任务、批量处理作业等。
简而言之,它可以使命令在后台运行,并且在终止终端会话后仍然继续运行。
下面是一些关于 nohup
命令的用法和示例:
-
基本用法:
nohup command & #nohup python script.py & #nohup bash /scripts/inotify.sh &
这将使
command
命令在后台运行,并且不会受到终端会话的影响。 -
输出重定向:
nohup command > output.log 2>&1 &
这将将
command
命令的输出日志重定向到output.log
文件中。2>&1
表示将标准错误输出(stderr)合并到标准输出(stdout)中。 -
指定日志文件:
nohup command > output.log 2> error.log &
这将将
command
命令的标准输出重定向到output.log
文件,并将标准错误输出重定向到error.log
文件中。 -
取消
nohup
进程:ps -ef | grep command kill process_id
使用
ps
命令结合grep
查找command
命令的进程ID(process_id),然后使用kill
命令终止该进程。
请注意,nohup
命令不会使命令在后台无限期运行。如果系统重启或发生其他异常情况,nohup
的作用可能会中断。为了更可靠地管理后台进程,您可能要考虑使用其他工具,如 systemd
或守护进程。