如何终止无响应的 Linux 进程

LinuxLinuxBeginner
立即练习

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

简介

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/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-419291{{"如何终止无响应的 Linux 进程"}} linux/bg_running -.-> lab-419291{{"如何终止无响应的 Linux 进程"}} linux/fg -.-> lab-419291{{"如何终止无响应的 Linux 进程"}} linux/kill -.-> lab-419291{{"如何终止无响应的 Linux 进程"}} linux/wait -.-> lab-419291{{"如何终止无响应的 Linux 进程"}} linux/bg_process -.-> lab-419291{{"如何终止无响应的 Linux 进程"}} linux/ps -.-> lab-419291{{"如何终止无响应的 Linux 进程"}} linux/top -.-> lab-419291{{"如何终止无响应的 Linux 进程"}} end

Linux 进程基础

Linux 进程是操作系统的基本构建块。进程是正在运行的程序的一个实例,它有自己的内存空间、CPU 时间和其他系统资源。了解 Linux 进程的基础知识对于系统管理、故障排除以及开发高效应用程序至关重要。

进程特性

Linux 进程具有几个关键属性,包括:

  • 进程 ID (PID):内核分配给每个进程的唯一标识符。
  • 父进程 ID (PPID):创建当前进程的进程的 PID。
  • 用户 ID (UID)组 ID (GID):进程的用户和组所有权。
  • 进程状态:进程的当前状态,例如运行、睡眠、停止或僵尸状态。
  • CPU 时间:进程消耗的 CPU 时间量。
  • 内存使用情况:分配给进程的内存量。

进程状态

Linux 进程在其生命周期中可以处于不同的状态:

graph LR NEW --> READY READY --> RUNNING RUNNING --> WAITING WAITING --> READY RUNNING --> TERMINATED
  • 新建:进程已创建但尚未准备好运行。
  • 就绪:进程已准备好执行,但正在等待 CPU 可用。
  • 运行:进程当前正在 CPU 上执行。
  • 等待:进程正在等待某个事件发生,例如 I/O 操作或信号。
  • 终止:进程已完成其执行或已被终止。

进程创建

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

示例代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
    pid_t pid;
    pid = fork();

    if (pid == 0) {
        printf("Child process (PID: %d, PPID: %d)\n", getpid(), getppid());
    } else if (pid > 0) {
        printf("Parent process (PID: %d, PPID: %d)\n", getpid(), getppid());
    } else {
        printf("Fork failed\n");
    }

    return 0;
}

此代码创建一个子进程,该子进程继承父进程的环境。然后,子进程打印自己的 PID 和其父进程的 PID。

监控和管理进程

对于系统管理员和开发者来说,监控和管理进程是至关重要的任务。Linux 提供了各种工具和命令来帮助你了解和控制系统上运行的进程。

进程列表

ps(进程状态)命令是列出正在运行的进程的主要工具。它可以显示诸如进程 ID、用户、CPU 和内存使用情况以及启动该进程的命令等信息。

示例:

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

进程监控工具

Linux 提供了几个用于监控和管理进程的工具,包括:

  • top:一个实时进程监控工具,显示有关资源消耗最大的进程的信息。
  • htoptop 命令的增强版本,提供更用户友好的界面。
  • pstree:显示正在运行的进程的层次结构视图,展示父子关系。

进程控制

你可以使用各种命令来控制进程的行为:

  • kill:向进程发送一个信号,可用于终止或暂停进程。
  • nice:设置进程的调度优先级,使你能够对进程进行优先级排序或降低优先级。
  • renice:更改正在运行的进程的调度优先级。

示例:

$ sudo kill -9 12345  ## 终止 PID 为 12345 的进程
$ nice -n 19 myapp   ## 以较低优先级运行'myapp' 进程
$ renice -n 5 -p 12345 ## 更改 PID 为 12345 的进程的优先级

通过理解和使用这些进程管理工具和命令,你可以有效地监控和控制 Linux 系统上运行的进程。

高级进程处理

虽然上一节介绍的基本进程管理至关重要,但 Linux 还提供了更高级的进程处理功能。这些功能包括在后台运行进程、管理系统服务以及自动化与进程相关的任务。

后台进程

在 Linux 中,你可以通过在命令末尾附加一个与号(&)来在后台运行进程。这样即使你注销了系统,该进程仍会继续运行。

示例:

$ myapp &
[1] 12345

输出显示了后台进程的进程 ID(PID),你可以稍后使用它来监控或控制该进程。

系统服务

Linux 使用诸如 systemd 之类的进程管理系统来处理系统服务。这些是在系统启动时自动启动并提供基本功能的后台进程。你可以使用 systemctl 等命令来管理这些服务。

示例:

$ sudo systemctl start nginx
$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-04-17 12:34:56 UTC; 10s ago

进程自动化

你可以使用 cron 等工具来自动化与进程相关的任务,它允许你安排命令或脚本按特定间隔运行。这对于系统备份、日志轮转和其他维护活动等任务很有用。

示例 cron 任务:

0 2 * * 0 /usr/local/bin/backup.sh

这将在每周日凌晨 2 点运行 backup.sh 脚本。

通过了解这些高级进程处理技术,你可以更好地管理和自动化 Linux 系统上运行的进程,提高其整体效率和可靠性。

总结

在本教程中,你已经学习了 Linux 进程的基础知识,包括它们的关键特性、状态和创建方式。你还探索了进程监控和管理的基础,以及高级进程处理技术。通过理解这些概念,你可以有效地管理 Linux 系统中的进程、排查问题并开发更高效的应用程序。