Linux信号简介
# Linux信号简介
Linux信号是一种在Linux操作系统中用于进程之间通信和操作进程的机制。信号是一种异步通知机制,当某个进程接收到信号时,它可以采取相应的措施,如处理信号、终止进程等。
Linux中有许多不同的信号,每个信号都有一个唯一的数字标识符,并且可以由内核或其他进程发送给一个目标进程。常见的信号包括SIGINT(中断信号,通常是由用户在终端上按下Ctrl+C发送的)和SIGKILL(强制终止信号,可以立即杀死目标进程)。开发人员可以编写信号处理函数来处理接收到的信号,并采取适当的行动。
# 信号概述
信号是UNIX/Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应的采取一些行动。
信号可能是由于某些错误条件而产生,例如内存段冲突、浮点运算错误、非法指令等,也可以作为由程序控制,明确的由一个进程发送给另一个进程。
信号可以被生成、捕获、响应和(至少对某些信号可以被)忽略
# 信号的定义
信号在头文件signal.h中定义,均以SIG开头。(*系统对信号的响应视情况而定)
信号名称 | 说明 |
---|---|
SIGABORT | *进程异常中止 |
SIGALRM | 超时警告 |
SIGFPE | *浮点运算异常 |
SIGHUP | 连接挂断 |
SIGILL | *非法指令 |
SIGINT | 终端中断(ctrl c) |
SIGKILL | 终止进程(此信号不能被捕捉或忽略) |
SIGPIPE | 向无读进程的管道写数据 |
SIGQUIT | 终端退出(ctrl \) |
SIGSEGV | *无效内存段访问 |
SIGTERM | 终止 |
SIGUSR1 | 用户定义信号之一 |
SIGUSR2 | 用户定义信号之二 |
如进程接收到如上信号,但是事先没有安排捕获它,进程将会立即终止。
其他一些信号如下。
信号名称 | 说明 |
---|---|
SIGCHLD | 子进程已经停止或退出 |
SIGCONT | 继续执行暂停进程 |
SIGSTOP | 停止执行(此信号不能被捕捉或忽略) |
SIGTSTP | 终端挂起(ctrl z) |
SIGTTIN | 后台进程尝试读操作 |
SIGTTOU | 后台进程尝试写操作 |
# 在shell中发送信号
当在键盘上敲入中断字符(ctrl+c),就会向前台进程发送SIGINT信号,终止该程序的执行,除非事先捕获了它。
如果想发送信号给不处于前台的进程,应使用kill命令。
向运行着同一个程序的进程发送信号,使用killall命令。
# 系统对信号的响应
进程接收到信号之后,如果事先没有安排捕获它,进程将会执行默认动作。
终止
忽略
暂停
继续执行(SIGCONT)
编辑 (opens new window)
上次更新: 2023/02/19, 10:48:02
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05