如何在 Linux 中使用 SIGINT 和其他终止信号如何在 Linux 中使用 SIGINT 和其他终止信号如何在 Linux 中使用 SIGINT 和其他终止信号如何在 Linux 中使用 SIGINT 和其他终止信号
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Linux 中使用 SIGINT 和其他终止信号

发表 admin at 2025年2月28日
类别
  • 未分类
标签

终止正在执行的进程不仅仅是kill -9。以下是一些重要的终止信号及其用法。

您一定习惯使用 Ctrl + C 来终止任何进程,但您知道它会发送 SIGINT 信号吗?

但终止信号的类型远不止使用 SIGINT(咳 Ctrl + c 咳)。那么,让我们深入了解终止信号的海洋吧!

在 Linux 中使用终止信号

Kill 命令是用户通常用来终止的命令,但是您知道 50 多个信号 Kill 命令对您有用吗?

这意味着您可以使用这些数字而不是编写信号名称。

例如,如果您想停止执行(挂起正在运行的进程),您最有可能使用 SIGTSTP,如下所示:

kill -SIGTSTP %jobID

同样,您可以使用 20,因为它与 SIGTSTP 关联,以达到相同的效果:

kill -20 %jobID

但选项太多,所以我将介绍广泛使用的选项。

那么让我们从 SIGSTP 开始。

使用 SIGTSTP 终止进程

首先,我先从杀掉前台进程说起。

与终止后台进程相比,它非常简单,因为您只需相应地使用键绑定即可。

执行SIGTSTP的按键绑定是ctrl+z。例如,我将使用 sleep 命令:

sleep 15000

在这里您可以看到我使用了 jobs 命令,这是一个有用的实用程序,可以显示正在运行和最近终止的进程。

但是后台进程呢?好吧,您需要使用kill 命令并通过-SIGTSTP 指定PID 或JOB ID。

kill -SIGSTP %jobID

使用 SIGCONT 恢复命令执行

有时您想要恢复最近终止的命令执行,在这种情况下,-SIGCONT 将为您提供帮助。

对于此示例,我将使用之前终止的进程,然后使用给定的命令恢复其执行:

kill -SIGCONT %jobID

使用 SIGINT 终止执行

这是我一直以来最喜欢的命令,因为每当我发现自己陷入困境时,ctrl+c 都会给我带来奇迹。

如果您不知道这一点,让我向您展示如何轻松终止命令执行:

但是 SIGINT 的问题是它可能在某些地方不起作用,例如 bash 解释器。

例如,下面是一个获取用户输入的 bash 脚本:

#!/bin/bash

trap date SIGINT

read input
echo User input: $input
echo Exiting now

正如您所看到的,当我按下 ctrl+c 时,它给了我当前的日期和时间,并且只有当它从我这边获得输入时才停止。

我知道这个脚本是这样创建的,但你说对了。您不能总是依赖 SIGINT。

使用 SIGQUIT 终止

SIGQUIT 与 SIGINT 类似,但它也在执行前生成核心转储。

简单来说,核心转储是在系统崩溃或进程终止之前自动生成的文件。

另外,可以使用 ctrl+\ 来激发它。因此您可以使用它来终止前台和后台进程。

因此,让我向您展示当您仅尝试 ctrl+\ 时它的行为方式:

但如何使用它来终止后台进程呢?让我简单介绍一下语法部分,让它变得更容易:

kill -SIGQUIT %jobID

使用 SIGTERM 终止执行

顾名思义,这是一个终止程序的终止信号,但与 SIGKILL(无论如何都会终止程序)不同,这是一种请求终止程序的礼貌方式。

如果您想了解有关 SIGTERM 与 SIGKILL 的更多信息,我推荐其他涉及核心基础知识的指南:

要记住的一件事是,有时它会在继续终止之前执行清理操作。

所以 SIGTERM 的语法非常简单:

kill -SIGTERM %jobID

使用SIGKILL(最后的手段)

⚠️
始终建议使用 SIGKILL 作为最后的手段,因为它会立即终止任何子进程,使其成为终止进程的最残酷的方式!

有时候,我发现自己遇到一些程序根本无法运行并且根本无法终止的情况!

因此,在这些情况下,我使用 SIGKILL 来让该进程以最不愉快的方式死亡。

现在,让我们看一下 SIGKILL 的通用语法:

kill -SIGKILL %jobID

包起来

本指南基本解释了如何使用各种信号选项来终止执行。如果您仍有任何疑问,请在评论中告诉我。

©2015-2025 Norria support@norria.com