6个Linux进程管理命令

dafenqi
2024-01-10 / 0 评论 / 14 阅读 / 正在检测是否收录...

这些命令允许你查看、监视和控制 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

lr8xq9p1.png

其中,右侧参数代表的意思如下:

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 命令的用法和示例:

  1. 基本用法:

    nohup command &
    #nohup python script.py &
    #nohup bash /scripts/inotify.sh &

    这将使 command 命令在后台运行,并且不会受到终端会话的影响。

  2. 输出重定向:

    nohup command > output.log 2>&1 &

    这将将 command 命令的输出日志重定向到 output.log 文件中。2>&1 表示将标准错误输出(stderr)合并到标准输出(stdout)中。

  3. 指定日志文件:

    nohup command > output.log 2> error.log &

    这将将 command 命令的标准输出重定向到 output.log 文件,并将标准错误输出重定向到 error.log 文件中。

  4. 取消 nohup 进程:

    ps -ef | grep command
    kill process_id

    使用 ps 命令结合 grep 查找 command 命令的进程ID(process_id),然后使用 kill 命令终止该进程。

请注意,nohup 命令不会使命令在后台无限期运行。如果系统重启或发生其他异常情况,nohup 的作用可能会中断。为了更可靠地管理后台进程,您可能要考虑使用其他工具,如 systemd 或守护进程。

0

评论 (0)

取消