linux 信号

信号的定义

计算机科学中,信号是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。

信号的作用
  1. 进程间通信:进程可以通过向其他进程发送信号的方式进行通信,例如某个进程在完成了某项工作之后,可以向另一个进程发送 SIGUSR1 信号,通知其进行下一步的操作。
  2. 处理异常:信号可以被用来处理程序中的异常情况,例如当一个进程尝试访问未分配的内存或者除以 0 时,系统会向该进程发送 SIGSEGV 或 SIGFPE 信号,用于处理这些异常情况。
  3. 系统调试:信号可以用于程序的调试,例如在程序运行时,可以向该进程发送 SIGUSR2 信号,用于打印程序的状态信息等。
 信号的分类和编号

在 Linux 中,信号被分类为标准信号实时信号,每个信号都有一个唯一的编号。标准信号是最基本的信号类型,由整数编号表示,编号范围是 1 到 31。实时信号是 Linux 中的扩展信号类型,由整数编号表示,编号范围是 32 到 64。

下面是常见的信号编号和对应的信号名称:

信号编号	信号名称	描述
1	SIGHUP	控制终端挂起或者断开连接
2	SIGINT	中断信号,通常由 Ctrl+C 发送
3	SIGQUIT	退出信号,通常由 Ctrl+\ 发送
4	SIGILL	非法指令信号
5	SIGTRAP	跟踪异常信号
6	SIGABRT	中止信号
7	SIGBUS	总线错误信号
8	SIGFPE	浮点错误信号
9	SIGKILL	强制退出信号
10	SIGUSR1	用户定义信号1
11	SIGSEGV	段错误信号
12	SIGUSR2	用户定义信号2
13	SIGPIPE	管道破裂信号
14	SIGALRM	闹钟信号
15	SIGTERM	终止信号
16	SIGSTKFLT	协处理器栈错误信号
17	SIGCHLD	子进程状态改变信号
18	SIGCONT	继续执行信号
19	SIGSTOP	暂停进程信号
20	SIGTSTP	终端停止信号
21	SIGTTIN	后台进程尝试读取终端输入信号
22	SIGTTOU	后台进程尝试写入终端输出信号
23	SIGURG	套接字上的紧急数据可读信号
24	SIGXCPU	超时信号
25	SIGXFSZ	文件大小限制超出信号
26	SIGVTALRM	虚拟定时器信号
27	SIGPROF	分析器定时器信号
28	SIGWINCH	窗口大小变化信号
29	SIGIO	文件描述符上就绪信号
30	SIGPWR	电源失效信号
31	SIGSYS	非法系统调用信号
32	SIGRTMIN	实时信号最小编号
...	...	...
64	SIGRTMAX	实时信号最大编号

kill -l可以查看操作系统拥有的信号

信号的产生

1. kill 命令

kill 命令是 Linux 中最常用的发送信号的命令,语法如下:

kill [-signal] PID

其中,-signal 可选参数表示要发送的信号类型,如果省略该参数,则默认发送 SIGTERM 信号。PID 表示接收信号的进程 ID。kill -9 就是指 发送SIGKILL命令。

2. kill 函数

除了使用 kill 命令,程序中也可以通过 kill 函数来发送信号。kill 函数的原型如下:

int kill(pid_t pid, int sig);

其中,pid 表示接收信号的进程 ID,sig 表示要发送的信号类型。如果函数调用成功,则返回 0,否则返回 -1 并设置 errno。

3.raise 函数

raise 函数是一个简单的发送信号的函数,可以用来向当前进程发送信号。raise 函数的原型如下:

int raise(int sig);

其中,sig 表示要发送的信号类型。如果函数调用成功,则返回 0,否则返回 -1 并设置 errno。

4. pthread_kill 函数

如果在多线程程序中需要向另一个线程发送信号,可以使用 pthread_kill 函数。pthread_kill 函数的原型如下:

int pthread_kill(pthread_t thread, int sig);

其中,thread 表示接收信号的线程 ID,sig 表示要发送的信号类型。如果函数调用成功,则返回 0,否则返回错误码。
 

参考:

https://blog.csdn.net/qq_45358642/article/details/129758736

https://baike.baidu.com/item/%E4%BF%A1%E5%8F%B7/7927794

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值