Linux 中的进程由信号中断控制。 Linux 中的信号是 Linux 最基本和最基本的结构之一。 信号和进程几乎控制着系统的每一项任务。 所以了解Linux信号的基本结构和功能是很值得的。
在本教程中,我们将讨论各种信号、它们的功能以及如何调用它们。
如何在 Linux 中使用 kill 命令?
什么是信号中断,为什么我们需要它?
在像 Linux 这样的操作系统中,有许多进程同时运行。 这些进程通常依赖于与它们一起运行的其他进程的状态。 他们需要一种相互沟通的方式来保持稳定。 进程通过发送称为信号的单向通知进行通信。
信号不一定需要在两个进程之间,信号可以发送到内核和从内核发送到进程。
信号有时被描述为信号中断,因为在大多数情况下,它们会中断程序的正常执行流程,并且它们的到达是不可预测的。
信号动作
每个信号中断都有一个当前处置,它决定了进程在将信号传递给它们时的行为方式。 有一些默认方式( Actions
) 进程响应信号的方式,这里是一个表格,描述了每个信号的不同操作。
行动 | 默认处置 |
学期 | 进程终止导致进程异常终止 |
伊恩 | 该信号被忽略并且对过程没有影响。 |
核 | 创建核心转储文件后,该过程终止。 |
停止 | 暂停进程。 |
帐户 | 如果进程被挂起,则继续进程。 |
表 1:操作及其默认配置
进程可以使用 sigaction 更改信号的配置。 使用这些系统调用,进程可以选择以下行为之一在信号传递时发生:
- 执行默认操作
- 忽略信号
- 使用信号处理程序捕获信号,这是一个程序员定义的函数,在信号传递时会自动调用。
一些常见信号及其意义
有31个标准信号,编号为1-31。 每个信号都被命名为“SIG”,后跟一个后缀。 从 2.2 版开始,Linux 内核支持 33 种不同的实时信号。
这里有几个 您可能遇到的常见信号:
信号名称 | 信号编号 | 单动作 | 描述 |
签到 | 1 | 学期 | 检测到控制终端挂断或控制进程死亡 |
信号情报 | 2 | 学期 | 键盘中断(通常是 Ctrl-C) |
退出 | 3 | 学期 | 手动中断(通常是 Ctrl-D) |
SIGKILL | 9 | 学期 | 立即终止进程,无需清理。 |
SIGSEGV | 11 | 核 | 无效的内存引用 |
表 2:一些常见信号及其各自的动作。
信号编号 0,在 POSIX.1 中称为 null signal
, 一般不使用,但 kill
函数将此用作特殊情况。 不发送信号,但可用于检查进程是否仍然存在。
向进程发送信号中断
发送信号中断最常用的方法之一是使用 kill function
,其语法如下:
kill -signal pid
例子:
一种 SIGHUP
信号以pid 1001发送到进程
kill -1 1001
一种 SIGKILL
将信号发送到 pid 为 1001 的进程以立即终止该进程。
kill -9 1001
还存在另一个功能 raise
向调用进程本身发送信号。 发送信号时,进程甚至在 raise 函数返回之前就已接收到该信号。
结论和参考
这篇关于 Linux 信号的介绍性教程到此结束。 请继续关注有关 Linux 和其他开源程序的更多此类文章。
参考:
- singal 上的 Linux 手册页
- Linux kill 手册页