Linux 终止信号数
本教程解释了什么是 Linux 终止信号以及如何使用它们来中断、终止、挂起和继续进程。
什么是 Linux 终止信号?
Kill 信号允许不同进程之间进行交互。具体来说,信号是发送到进程的事件通知,主要用于中断、终止、终止或挂起进程(这就是我们使用术语“kill”的原因)。信号可以由进程或内核发送,通常当异常或例外情况需要特殊处理时,或者当用户手动中断或终止进程时(例如,按 Ctrl+C 时),
当信号发送到进程时,该信号或通知可能满足默认操作作为响应,或者可能由信号处理程序处理。信号处理程序是进程接收信号的程序的自定义代码,它定义了接收到信号时进程的行为(信号 SIGKILL 和 SIGSTOP 除外,它们不能被处理、忽略或阻止)。
发送信号时,可能发生的默认操作如下:
期限:进程终止。
Ign:忽略信号,不影响进程。
核心:创建转储核心文件。
停止:进程停止。
继续:进程停止后继续。
根据可能发生的某些操作的信号,程序还可以包含信号处理程序来执行适当的操作。
总结:信号是传递给进程的消息,通知它们发生了事件。
可用信号:
要列出系统上的所有信号名称和编号,可以使用 Kill 命令,后跟 -l 标志,如下所示。
正如您所看到的,有 64 个信号,我们大家最熟悉的可能是数字 9 (SIGKILL),用于立即终止进程(包括子进程)。
SIGKILL (9):SIGKILL 信号用于立即杀死或终止进程。 SIGKILL 信号无法被处理、忽略或停止。
SIGSTOP (19):此信号用于停止或暂停可以稍后恢复的进程。
SIGCONT (18):SIGCONT 信号用于恢复停止或暂停的进程。
如何使用终止信号:
发送信号的正确语法是:
或者
您可以将 ir 替换为我们之前运行kill -l 命令时获得的名称或号码。 PID 是您可以使用 ps 命令了解的进程 ID,如以下说明所示。
为了开始本教程的实践部分,让我们尝试使用 SIGSTOP 和 SIGCONT 来暂停进程,然后恢复它。对于第一个示例,我创建了一个名为 linuxsignal 的小代码,它连续打印“linux教程 ” ”,如下面的屏幕截图所示。
为了向进程发送信号,我需要先了解它的 PID。要查看进程 ID (PID),您需要运行 ps 命令。就我而言,我是执行该进程的人,因此我使用 ps 命令后跟 -u 标志来仅显示我的进程。
注意:有关 ps 命令的更多说明,请阅读在 Linux 中使用 ps 命令。
如您所见,正在运行的linuxsignal脚本的PID是16182。
以下屏幕截图显示了两个终端;右侧终端显示向进程 16182 发送 SIGSTOP 信号。左侧终端显示当我发送信号时进程如何停止。
正如您在右侧终端上看到的,该进程已正确停止。
您需要发送 SIGCONT 信号来恢复进程执行,如下图所示。
如您所见,该过程已恢复。
您可以通过将信号名称替换为其编号来获得相同的结果。下面的示例重复了前面的场景,但这次是通过信号的编号来定义信号。
以下示例还显示了如何将 SIGKILL 传递给进程 17721 以暂停它。这次,我没有指定信号名称,而是指定了 kill -l 命令返回的信号编号,在本例中,19 表示 SIGSTOP 信号。
以下屏幕截图显示了如何指定 SIGCONT 信号,也使用其编号而不是名称。
正如您所看到的,使用信号名称或编号时的结果是相同的。
如前所述,SIGKILL 信号用于完全终止进程;它可能是用户最常用的信号。
正如您在下面的示例中看到的,其中 SIGKILL 是用其编号 (9) 实现的,脚本已完全终止或终止。
其他重要信号:
SIGINT:当用户请求进程中断(例如,Ctrl+C)时发送此信号。
IGTERM:发送 SIGTERM 信号是为了请求进程终止,但仅用于请求而不是终止。与 SIGKILL 或 SIGSTOP 相反,可以处理、阻止或忽略该信号。
SIGILL:该信号用于终止由于操作或执行错误等错误而导致的进程。这个信号不容忽视。
SIGCHLD:用于通知父进程有关子进程的事件。
SIGHUP:当连接突然中断时会触发此信号。
SIGPIPE:此信号被发送到尝试写入没有读取端或无法读取的管道的进程。
SIGQUIT:该信号与 SIGINT 类似,但会产生核心转储。
结论:
使用 Linux 信号来终止、停止、暂停进程等功能是任何 Linux 用户都必须掌握的基本知识。对信号的深入了解对于必须确保信号处理程序不会对系统产生不良影响的程序员尤其重要。如您所见,有数十种可用信号;本教程仅关注最常见的。您可以在 https://www.gnu.org/software/libc/manual/html_node/Standard-Signals.html 获取有关 Linux 信号的更多信息。
感谢您阅读 Linux 提示;继续关注我们以获取更多 Linux 技巧和教程。