如何显示 Linux 进程详细信息

LinuxLinuxBeginner
立即练习

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

简介

本教程将全面概述 Linux 进程,涵盖基本概念、生命周期、属性以及不同类型的进程。你将学习如何使用各种命令和工具来监控和管理 Linux 进程,从而能够有效地对 Linux 系统进行故障排除和优化。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/ProcessManagementandControlGroup -.-> linux/jobs("Job Managing") linux/ProcessManagementandControlGroup -.-> linux/bg_running("Background Running") linux/ProcessManagementandControlGroup -.-> linux/fg("Job Foregrounding") linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/killall("Multi-Process 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-419283{{"如何显示 Linux 进程详细信息"}} linux/bg_running -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} linux/fg -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} linux/kill -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} linux/killall -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} linux/wait -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} linux/bg_process -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} linux/ps -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} linux/top -.-> lab-419283{{"如何显示 Linux 进程详细信息"}} end

Linux 进程基础

Linux 进程是操作系统的基本构建块。进程是正在执行的计算机程序的一个实例。它代表计算机处理器对一组指令的执行。在本节中,我们将探讨 Linux 进程的基本概念、生命周期、属性以及不同类型。

进程生命周期

Linux 进程的生命周期可以用状态图来表示。进程可以处于的主要状态有:

graph LR NEW --> READY READY --> RUNNING RUNNING --> WAITING WAITING --> READY RUNNING --> TERMINATED

当创建一个新进程时,它进入 NEW 状态。然后它转换到 READY 状态,等待被调度执行。一旦被调度,进程进入 RUNNING 状态,在该状态下它使用 CPU。正在运行的进程要么在 I/O 操作被阻塞时转换到 WAITING 状态,要么在执行完成时转换到 TERMINATED 状态。

进程属性

每个 Linux 进程都有一组定义其状态和特征的属性。一些关键的进程属性如下:

属性 描述
进程 ID (PID) 进程的唯一标识符
父进程 ID (PPID) 创建当前进程的进程的 PID
用户 ID (UID) 拥有该进程的用户
组 ID (GID) 进程所属的组
优先级 进程的调度优先级
CPU 时间 进程使用的 CPU 时间量

可以使用各种 Linux 命令和系统调用来访问和操作这些属性。

进程类型

Linux 支持不同类型的进程,每种进程都有其自身的特点和用例:

  1. 前台进程:这些是与用户的终端会话直接相关的交互式进程。
  2. 后台进程:这些是非交互式进程,在后台运行,无需用户直接交互。
  3. 守护进程:这些是持续运行的后台进程,提供系统级服务。
  4. 轻量级进程(线程):这些是共享相同内存空间和资源的进程,允许进行高效的并行执行。

了解不同的进程类型及其用例对于在 Linux 环境中进行有效的进程管理至关重要。

监控 Linux 进程

对于系统管理员和开发人员来说,有效地监控和检查 Linux 进程对于了解系统状态和排查问题至关重要。Linux 为此提供了各种工具和命令。在本节中,我们将探讨一些常用的进程监控实用工具。

ps 命令

ps(进程状态)命令是检查正在运行的进程的基本工具。它允许你查看有关进程当前状态的信息,例如它们的进程 ID(PID)、用户、CPU 和内存使用情况等等。以下是使用 ps 命令的示例:

$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 18240 4424? Ss Apr04 0:01 /sbin/init
root 2 0.0 0.0 0 0? S Apr04 0:00 [kthreadd]
root 3 0.0 0.0 0 0? I 0:00 [rcu_gp] < Apr04

可以使用各种选项对 ps 命令进行定制,以显示特定的进程信息。

top 命令

top 命令提供了系统上正在运行的进程的实时动态视图。它显示诸如 CPU 和内存利用率等信息,以及详细的进程级指标。top 命令会定期更新显示内容,使你能够实时监控系统活动。

top - 12:34:56 up 123 days, 12:34,  1 user,  load average: 0.15, 0.20, 0.18
Tasks: 295 total,   1 running, 294 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  1.0 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3921224 total,   378164 free,  1509596 used,  2033464 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1728312 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0  118240   4424   2876 S  0.0  0.1   0:01.20 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd

pstree 命令

pstree 命令显示正在运行的进程的层次结构视图,展示它们之间的父子关系。这对于理解系统内的进程结构和依赖关系很有用。

$ pstree
systemd─┬─accounts-daemon───2*[{accounts-daemon}]
        ├─agetty
        ├─atd
        ├─cron
        ├─dbus-daemon
        ├─dockerd─┬─containerd─┬─containerd-shim─┬─nginx───2*[nginx]
        │         │            └─2*[containerd-shim]
        │         └─7*[{dockerd}]
        ├─irqbalance
        ├─networkd-dispat
        ├─rsyslogd───2*[{rsyslogd}]
        ├─snapd───14*[{snapd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-network
        ├─systemd-resolve
        └─systemd-timesyn

这些进程监控工具为你深入了解 Linux 系统的状态和行为提供了有价值的见解,使你能够更有效地识别和排查问题。

管理 Linux 进程

除了监控正在运行的进程外,Linux 还提供了丰富的工具和技术来管理进程。这包括创建新进程、控制它们的执行以及调整它们的资源分配。在本节中,我们将探讨 Linux 环境中进程管理的各个方面。

进程创建

Linux 中使用 fork() 系统调用来创建新进程,该调用会创建一个子进程,它是父进程的副本。子进程继承父进程的环境,包括内存、打开的文件和其他资源。在 fork() 之后,子进程可以使用 exec() 系统调用来执行不同的程序。

以下是在 C 语言中创建新进程的示例:

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();
    if (pid == 0) {
        // 子进程
        printf("子进程 (PID: %d)\n", getpid());
    } else if (pid > 0) {
        // 父进程
        printf("父进程 (PID: %d, 子进程 PID: %d)\n", getpid(), pid);
    } else {
        // Fork 失败
        printf("Fork 失败\n");
    }
    return 0;
}

进程控制

Linux 提供了各种命令和系统调用来控制进程的执行。一些常见操作包括:

  • 使用 kill 命令或 kill() 系统调向进程发送信号
  • 使用 stopcontinue 命令暂停和恢复进程
  • 使用 nice 命令或 setpriority() 系统调更改进程的优先级

这些进程控制机制使你能够管理正在运行的进程的行为和资源分配。

进程调度

Linux 内核使用一种抢占式的、基于优先级的调度算法来确定在任何给定时间应该执行哪个进程。进程被分配一个优先级值,可以使用 nice 命令或 setpriority() 系统调进行调整。

内核的调度器负责根据进程优先级、CPU 利用率和 I/O 操作等因素选择下一个要运行的进程。了解进程调度机制可以帮助你优化 Linux 系统的性能。

通过掌握创建、控制和调度进程的技术,你可以有效地管理 Linux 系统上应用程序和服务的执行,确保最佳性能和资源利用率。

总结

在本教程中,你已经学习了 Linux 进程的基本概念,包括它们的生命周期、属性以及不同类型。你还探索了用于监控和管理 Linux 系统上进程的工具和命令。通过了解 Linux 进程的内部工作原理,你现在可以有效地对 Linux 系统进行故障排除和优化其性能,确保它们平稳高效地运行。