信号

优质
小牛编辑
143浏览
2023-12-01

信号接口

结构体

struct  siginfo_node
 信号控制块 更多...
 

函数

rt_sighandler_t rt_signal_install (int signo, rt_sighandler_t handler)
 信号安装
 
void rt_signal_mask (int signo)
 信号阻塞
 
void rt_signal_unmask (int signo)
 解除信号阻塞
 
int rt_signal_wait (const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout)
 等待信号
 
int rt_thread_kill (rt_thread_t tid, int sig)
 信号的发送
 

详细描述

信号接口

软中断信号(signal,又简称为信号)用来通知线程发生了异步事件。在软件层次上是对中断机制的一种模拟, 在原理上,一个线程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是线程间通信机制中唯一的 异步通信机制,一个线程不必通过任何操作来等待信号的到达,事实上,线程也不知道信号到底什么时候到达, 线程之间可以互相通过调用 kill 发送软中断信号。

收到信号的线程对各种信号有不同的处理方法。处理方法可以分为三类:

  • 第一种是类似中断的处理程序,对于需要处理的信号,线程可以指定处理函数,由该函数来处理。
  • 第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。
  • 第三种方法是,对该信号的处理保留系统的默认值。

函数说明

rt_sighandler_t rt_signal_install(int signo,
rt_sighandler_t handler 
)

信号安装

如果线程要处理某一信号,那么就要在线程中安装该信号。安装信号主要 用来确定信号值及线程针对该信号值的动作之间的映射关系,即线程将要处理 哪个信号;该信号被传递给线程时,将执行何种操作。

参数
signo信号值(只有 SIGUSR1 和 SIGUSR2 是开放给用户使用的)
handler信号值的处理。可以忽略该信号(参数设为 SIG_IGN); 可以采用系统默认方式处理信号 (参数设为 SIG_DFL);也可以自己实现 处理方式 (参数指定一个函数地址)。
注解
成功安装信号前的 handler 值,失败返回SIG_ERR。
示例:
signal_sample.c.
void rt_signal_mask(int signo)

信号阻塞

该函数将阻塞指定的信号。

参数
signo指定的信号值
void rt_signal_unmask(int signo)

解除信号阻塞

该函数将解除指定信号的阻塞。

参数
signo指定的信号值
示例:
signal_sample.c.
int rt_signal_wait(const rt_sigset_t * set,
rt_siginfo_t * si,
rt_int32_t timeout 
)

等待信号

该函数将等待 set 信号的到来,如果没有等到这个信号,则把线程给挂起来, 直到等到这个信号或者等待时间超过指定的超时时间 timeout。

参数
set指定等待的信号值
si等待的信号句柄
timeout指定的超时时间
int rt_thread_kill(rt_thread_t tid,
int sig 
)

信号的发送

调用该函数可以用来向任何线程发送任何信号。

参数
tid接收信号的线程
sig指定的信号值
示例:
signal_sample.c.