您必须习惯使用 Ctrl + C 来终止任何进程,但您知道它会发送 SIGINT
信号?
但是有更多类型的终止信号,而不仅仅是使用 SIGINT
(咳嗽 Ctrl + c 咳嗽)。 因此,让我们深入了解终端信号的海洋!!
在 Linux 中使用终止信号
kill 命令是用户通常用于终止的命令,但您知道 50 多个信号 kill 命令对您有用吗?
这意味着您可以使用这些数字而不是编写信号名称。
为了 example,如果你想停止执行,你最有可能使用 SIGTSTP
像这样:
kill -SIGTSTP %jobID
同样,您可以使用 20
因为它与 SIGTSTP
达到同样的效果:
kill -20 %jobID

但是有太多的选项,所以我将介绍广泛使用的选项。
所以让我们从 SIGSTOP
.
使用 SIGTSTP 终止进程
首先,让我从杀戮前台进程说起。
与杀死后台进程相比,这非常简单,因为您只需要相应地使用键绑定即可。
执行键绑定 SIGTSTOP
是 ctrl + z
. 为了 example,我将使用 sleep 命令:
sleep 15000

在这里你可以看到我已经使用了 jobs
命令,一个有用的实用程序,显示正在运行和最近终止的进程。
但是后台进程呢? 那么,你需要使用指定 PID 或 JOB ID 的 kill 命令 -SIGTSTOP
.
kill -SIGSTP %jobID

使用 SIGCONT 恢复命令执行
有时您想恢复最近终止的命令执行,在这种情况下, -SIGCONT
会帮助你。
为了这 example,我将使用先前终止的进程,然后使用给定的命令恢复其执行:
kill -SIGCONT %jobID

使用 SIGINT 终止执行
这是我一直以来最喜欢的命令,因为每当我发现自己卡在某个地方时, ctrl + c
为我创造奇迹。
如果您不知道这一点,让我向您展示它如何轻松终止命令执行:

但问题是 SIGINT
它在某些地方可能不起作用,例如 bash 口译员。
为了 example,这是一个 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

总结
本指南是关于如何使用各种信号选项来终止执行的基本说明。 如果您仍有任何疑问,请在评论中告诉我。