Loading... 这些命令允许你查看、监视和控制 Linux 系统上运行的进程。这对确定资源使用情况和停止行为不端的程序非常有用。 ## 1. ps – 报告当前进程概览 使用ps,您可以查看当前shell会话正在运行的进程。它打印有关正在运行的程序的有用信息,如进程ID、TTY(电传打字机)、时间和命令名。 ```bash [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 <username> 命令用于列出特定用户的进程信息。这对于管理员监控用户的进程活动和资源消耗非常有帮助。 - 查看特定进程的详细信息:ps -p <PID> -f 命令用于获取特定进程的详细信息,包括进程启动时间、父进程ID、CPU使用情况和命令行参数等。 ### 怎么使用ps --forest #### 查看整个进程树: ```bash ps --forest ``` 上述命令将显示整个进程树,以树状图的形式展示父子进程的关系。 **显示详细信息并展示进程树:** ```bash ps --forest -f ``` 上述命令将显示进程树,并提供完整的进程信息,包括进程状态、资源使用情况等。 **显示特定用户的进程树:** ```bash ps --forest -u username ``` 将以树状图形式显示指定用户的进程树。 **定向输出:** ```bash ps --forest > processes.txt ``` 上述命令将将进程树输出到名为 "processes.txt" 的文件中,您可以将其用作后续处理或记录进程信息的参考。 **结合选项使用:** ```bash [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使用率等。 ```bash [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。 例子: ```bash top -u mysql ``` 上述命令只监控 “mysql” 用户的进程。它对识别资源密集型程序很有帮助。 ## 3. htop – 交互式进程浏览器 htop是一种交互式流程查看器,可让您直接从终端管理计算机的资源。在大多数情况下,默认情况下它并没有安装,所以请确保在下载页面上阅读更多关于它的信息。 只需在命令行中输入 htop,即可查看进程。 ```bash htop ``` ![lr8xq9p1.png](http://flt-pan.58heshihu.com/blog/typecho/lr8xq9p1.png) 其中,右侧参数代表的意思如下: ```bash 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)或程序的二进制名称来终止进程: ```bash kill 533494 kill firefox ``` 又如: ```bash 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 更容易。 例子: ```bash pkill -9 php-fpm ``` ```bash [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 来锁定进程。 **其他使用参数选项:** 使用进程名称终止进程: ```bash pkill process_name ``` 这将终止所有与给定进程名称匹配的进程。 使用正则表达式终止进程: ```bash pkill -f "pattern" ``` 通过使用 -f 参数,可以使用正则表达式模式匹配进程的命令行参数,从而终止匹配的进程。 使用用户名终止进程: ```bash pkill -u username ``` 这将终止属于特定用户的所有进程。 ## 6. nohup – 运行不受挂起影响的命令 `nohup` 命令的使用使命令或脚本可以在后台持续运行,即使用户退出当前终端会话也不会受到影响。它通常用于长时间运行的任务、批量处理作业等。 简而言之,它可以使命令在后台运行,并且在终止终端会话后仍然继续运行。 下面是一些关于 `nohup` 命令的用法和示例: 1. 基本用法: ```bash nohup command & #nohup python script.py & #nohup bash /scripts/inotify.sh & ``` 这将使 `command` 命令在后台运行,并且不会受到终端会话的影响。 2. 输出重定向: ```bash nohup command > output.log 2>&1 & ``` 这将将 `command` 命令的输出日志重定向到 `output.log` 文件中。`2>&1` 表示将标准错误输出(stderr)合并到标准输出(stdout)中。 3. 指定日志文件: ```bash nohup command > output.log 2> error.log & ``` 这将将 `command` 命令的标准输出重定向到 `output.log` 文件,并将标准错误输出重定向到 `error.log` 文件中。 4. 取消 `nohup` 进程: ```bash ps -ef | grep command kill process_id ``` 使用 `ps` 命令结合 `grep` 查找 `command` 命令的进程ID(process_id),然后使用 `kill` 命令终止该进程。 请注意,`nohup` 命令不会使命令在后台无限期运行。如果系统重启或发生其他异常情况,`nohup` 的作用可能会中断。为了更可靠地管理后台进程,您可能要考虑使用其他工具,如 `systemd` 或守护进程。 最后修改:2024 年 01 月 11 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏
1 条评论
兄弟写的非常好 https://www.cscnn.com/