较之于标准信号,实时信号的优势如下所示:
1. 实时信号的信号范围有所扩大,可应用于程序自定义的目的,而标准信号中可供应用随意使用的信号仅有SIGUSR1, SIGUSR2
2. 对实时信号采取的是排队管理
3. 当发送一个实时信号时,可以为信号指定百岁数据,供接收进程的信号处理器获取
4. 不同实时信号的传递顺序得到保障。如果有多个不同的实时信号处于等待,那么将率先处理具有最小编号的信号
内核会对排队的实时信号的数量进行限制
点击(此处)折叠或打开
-
#define _POSIX_C_SOURCE 199309
-
#include <signal.h>
-
int sigqueue(pid_t pid, int sig, const union sigval value);
-
/*returns 0 on success, or -1 on error*/
-
-
union sigval{
-
int sival_int; /*integer value for accompanying data */
-
void *sigval_ptr; /*pointer value for accompanying data*/
- };
1. si_signo
2. si_code
3. si_value,附带数据
4. si_pid,发送进程
5. si_uid, 发送进程的实际用户id
点击(此处)折叠或打开
-
struct signalfd_siginfo{
-
uint32_t ssi_signo;
-
int32_t ssi_errno;
-
int32_t ssi_code;
-
uint32_t ssi_pid;
-
uint32_t ssi_uid;
-
int32_t ssi_fd;
-
uint32_t ssi_tid; /*kernel timer id*/
-
uint32_t ssi_band; /*band event*/
-
uint32_t ssi_tik; /*(kernel-internal) timer ID */
-
uint32_t ssi_overrun; /*overrun count (posix timers)*/
-
uint32_t ssi_trapno;
-
int32_t ssi_status;
-
int32_t ssi_int;
-
uint64_t ssi_ptr;
-
uint64_t ssi_utime;
-
uint64_t ssi_stime;
-
uint64_t ssi_addr;
- };
使用掩码来等待信号:
点击(此处)折叠或打开
-
#include <signal.h>
-
int sigsuspend(const sigset_t *mask);
- /*normally returns -1 with errno set to EINTR*/