当前位置:实例文章 » 其他实例» [文章]【Linux】进程信号 -- 信号产生 | 系统调用、硬件、软件的信号发送

【Linux】进程信号 -- 信号产生 | 系统调用、硬件、软件的信号发送

发布人:shili8 发布时间:2025-01-18 00:06 阅读次数:0

**Linux 进程信号**

在 Linux 中,进程信号(Process Signal)是进程间通信的一种重要机制。信号是一种异步事件通知,用于告知进程某些特定条件已经发生。信号可以由系统调用、硬件或其他软件产生。

**信号产生**

信号可以由以下几种方式产生:

1. **系统调用**: 当进程执行某些系统调用时,可能会产生信号,如 `kill` 系统调用。
2. **硬件**: 硬件事件如中断、分页错误等也可以产生信号。
3. **软件**: 其他进程或线程通过发送信号函数(如 `kill` 或 `raise`)来产生信号。

**信号类型**

Linux 中定义了32 种信号类型,编号从1 到31。以下是常见的信号类型:

| 信号编号 | 名称 |
| --- | --- |
|1 | SIGHUP(终端断开) |
|2 | SIGINT(中断键盘输入) |
|3 | SIGQUIT(退出键盘输入) |
|4 | SIGILL(非法指令) |
|5 | SIGTRAP(追踪陷阱) |
|6 | SIGABRT(终止信号) |
|7 | SIGBUS(地址错误) |
|8 | SIGFPE(浮点运算异常) |
|9 | SIGKILL(强制终止) |
|10 | SIGUSR1(用户定义信号1) |
|11 | SIGSEGV(段错误) |
|12 | SIGPIPE(管道破裂) |
|13 | SIGALRM(定时器超时) |
|14 | SIGTERM(终止信号) |

**信号处理**

当进程接收到信号时,它会执行以下步骤:

1. **信号捕捉**: 如果进程已经安装了信号捕捉函数,则会调用该函数。
2. **默认行为**: 如果没有安装信号捕捉函数,则进程会执行默认行为,通常是终止或继续运行。

**信号捕捉**

信号捕捉函数(Signal Handler)是一个特殊的函数,它负责处理接收到的信号。信号捕捉函数可以通过以下方式注册:

cvoid signal(int sig, void (*handler)(int));


示例代码:
c#include <stdio.h>
#include <signal.h>

void my_handler(int sig) {
 printf("Received signal %d
", sig);
}

int main() {
 signal(SIGINT, my_handler); // 注册信号捕捉函数 while (1) {
 sleep(1);
 }
 return0;
}


**总结**

Linux 进程信号是一种重要的进程间通信机制。信号可以由系统调用、硬件或其他软件产生,进程可以通过安装信号捕捉函数来处理接收到的信号。信号捕捉函数负责执行特定操作,当进程接收到指定信号时。

其他信息

其他资源

Top