如何识别和管理 Linux 进程

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程全面介绍了 Linux 进程,涵盖了基本概念、管理命令以及列出和监控正在运行的进程的技术。通过掌握这些技能,你将能够有效地管理基于 Linux 的系统并进行故障排除,确保最佳性能和稳定性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux/ProcessManagementandControlGroup -.-> linux/jobs("Job Managing") linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/killall("Multi-Process Killing") linux/ProcessManagementandControlGroup -.-> linux/pkill("Pattern-Based Killing") linux/ProcessManagementandControlGroup -.-> linux/wait("Process Waiting") linux/ProcessManagementandControlGroup -.-> linux/bg_process("Background Management") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/SystemInformationandMonitoringGroup -.-> linux/top("Task Displaying") subgraph Lab Skills linux/jobs -.-> lab-417262{{"如何识别和管理 Linux 进程"}} linux/kill -.-> lab-417262{{"如何识别和管理 Linux 进程"}} linux/killall -.-> lab-417262{{"如何识别和管理 Linux 进程"}} linux/pkill -.-> lab-417262{{"如何识别和管理 Linux 进程"}} linux/wait -.-> lab-417262{{"如何识别和管理 Linux 进程"}} linux/bg_process -.-> lab-417262{{"如何识别和管理 Linux 进程"}} linux/ps -.-> lab-417262{{"如何识别和管理 Linux 进程"}} linux/top -.-> lab-417262{{"如何识别和管理 Linux 进程"}} end

理解 Linux 进程

在 Linux 操作系统中,进程是执行的基本单元。进程是正在运行的程序的一个实例,它代表计算机的 CPU 执行一组指令。对于使用基于 Linux 的系统的系统管理员和开发人员来说,理解 Linux 进程的概念和管理至关重要。

Linux 进程的基本概念

Linux 进程有一个唯一的进程 ID(PID),用于标识和管理该进程。每个进程还有一个父进程,即创建它的进程。进程的层次结构形成一个进程树,初始进程(通常称为 “init” 进程)为根。

进程可以处于不同的状态,如运行、睡眠、停止或僵尸状态。可以使用各种命令行工具(如 pstop)来监控进程的状态。

进程生命周期

Linux 进程的生命周期可以分为以下几个阶段:

  1. 创建:当程序被执行时,无论是由用户还是由另一个进程执行,都会创建一个新进程。
  2. 执行:操作系统的调度器将该进程调度到 CPU 上运行,并执行其指令。
  3. 终止:进程可以正常终止(通过完成其任务)或异常终止(由于错误或信号)。
graph LR A[进程创建] --> B[进程执行] B --> C[进程终止]

进程管理命令

Linux 提供了几个用于管理进程的命令行工具,包括:

  • ps:显示有关正在运行的进程的信息
  • top:提供正在运行的进程的实时视图
  • kill:向进程发送信号,使你能够终止或控制它们
  • pgrep:根据进程的名称或其他属性查找或向进程发送信号

以下是使用 ps 命令列出所有正在运行的进程的示例:

$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:30? 00:00:03 /sbin/init
root 2 0 0 10:30? 00:00:00 [kthreadd]
root 3 2 0 10:30? 00:00:00 [rcu_gp]
root 4 2 0 10:30? 00:00:00 [rcu_par_gp]

此输出显示了每个正在运行的进程的进程 ID(PID)、父进程 ID(PPID)、CPU 使用率(C)、开始时间(STIME)、终端(TTY)、CPU 时间(TIME)和命令(CMD)。

列出并监控正在运行的进程

对于使用基于 Linux 的系统的系统管理员和开发人员来说,有效地列出并监控正在运行的进程是一项至关重要的任务。Linux 提供了几个命令行工具,使你能够查看系统上正在运行的进程的详细信息。

列出正在运行的进程

在 Linux 中,用于列出正在运行的进程的主要命令是 ps(进程状态)。ps 命令可以与各种选项一起使用,以自定义输出并显示有关正在运行的进程的特定信息。

以下是使用 ps 命令列出所有正在运行的进程的示例:

$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:30? 00:00:03 /sbin/init
root 2 0 0 10:30? 00:00:00 [kthreadd]
root 3 2 0 10:30? 00:00:00 [rcu_gp]
root 4 2 0 10:30? 00:00:00 [rcu_par_gp]

此命令显示每个正在运行的进程的进程 ID(PID)、父进程 ID(PPID)、CPU 使用率(C)、开始时间(STIME)、终端(TTY)、CPU 时间(TIME)和命令(CMD)。

监控正在运行的进程

要更动态地查看正在运行的进程,可以使用 top 命令。top 命令实时显示系统上最消耗资源的进程,包括 CPU 和内存使用情况。

$ top
top - 10:30:00 up 1 day, 23:59,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 105 total,   1 running,  104 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2048000 total,   334300 free,   497460 used,  1216240 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   975312 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   41220   4688   2800 S   0.0  0.2   0:03.14 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_gp
    4 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_par_gp

top 命令提供正在运行的进程的实时视图,包括它们的进程 ID、用户、优先级、CPU 和内存使用情况以及正在执行的命令。

通过使用 pstop 命令,你可以有效地列出并监控 Linux 系统上正在运行的进程,这对于故障排除和性能优化至关重要。

分析和排查进程问题

分析和排查进程问题对于维护 Linux 系统的健康和性能至关重要。Linux 提供了各种工具和技术,使你能够更深入地了解正在运行的进程的详细信息,并识别和解决任何问题。

分析进程详细信息

要分析正在运行的进程的详细信息,可以使用带有其他选项的 ps 命令。例如,以下命令显示有关特定进程的详细信息:

$ ps -p 1234 -o pid,user,cmd,rss,vsz
PID USER CMD RSS VSZ
1234 root /usr/bin/python3 12456 45324

此命令显示进程 ID(PID)、运行该进程的用户、正在执行的命令、驻留集大小(RSS,进程使用的物理内存量)和虚拟内存大小(VSZ)。

你还可以使用 pstree 命令来可视化进程层次结构,并了解进程之间的关系。

排查进程问题

当一个进程导致问题时,例如高 CPU 或内存使用率,你可以使用 top 命令来识别有问题的进程并采取适当的措施。

例如,如果一个进程占用大量 CPU,你可以使用 top 命令按 CPU 使用率对进程进行排序并找出问题所在:

$ top -o %CPU
top - 10:30:00 up 1 day, 23:59,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 105 total,   1 running,  104 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2048000 total,   334300 free,   497460 used,  1216240 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   975312 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1234 root      20   0  123456 12456   4800 R 99.9  0.6   1:23.45 python3

在这个例子中,PID 为 1234 的进程占用了大量 CPU,你可以进一步调查该进程或采取适当措施来解决问题。

通过使用本节中讨论的工具和技术,你可以有效地分析和排查 Linux 系统上的进程问题,确保最佳性能和稳定性。

总结

在本教程中,你已经学习了 Linux 进程的基本概念,包括它们的生命周期、状态以及用于管理它们的各种命令行工具。你还探索了列出和监控正在运行的进程的技术,以及分析和排查与进程相关问题的方法。有了这些知识,你现在可以有效地管理和优化 Linux 系统的性能,确保它们平稳高效地运行。