我正在处理信号处理程序,以处理收割的信号,当我调用sigwaitinfo函数时,我会随机获得偏移量的信号。除info.si_addr之外,所有信号属性都是正确的。 info.si_addr中的这些偏移量导致细分错误
这些偏移量似乎是相同的,我已经尝试了删除偏移量,并且可行,但是我需要正确的解决方案才能继续
答案 0 :(得分:1)
您滥用si_addr
。仅适用于有限数量的信号,而这些信号不包含任何实时信号。
Per POSIX,si_addr
不适用于SIGILL
,SIGFPE
,SIGSEGV
和SIGBUS
以外的信号。 Linux还为si_addr
提供了SIGTRAP
数据:
SIGILL
,SIGFPE
,SIGSEGV
,SIGBUS
和SIGTRAP
用故障地址填写si_addr
。
没有其他信号提供si_addr
的值。
si_addr
的 The source code linux/kernel/signal.c
清楚地表明,si_addr
除列出的信号外不用于其他任何信号。
请注意,每个the Linux signal(7)
man page:
实时信号的特征如下:
可以将多个实时信号实例排队。通过 相反,如果标准信号的多个实例是 在该信号当前被阻止的情况下传送,则只有一个 实例已排队。
如果使用
sigqueue(3)
发送信号,则附带一个值 (整数或指针)可以与信号一起发送。如果 接收过程使用以下命令为此信号建立处理程序sigaction(2)
的SA_SIGINFO
标志,则它可以获得此数据 通过si_value
结构的siginfo_t
字段作为 处理程序的第二个参数。此外,si_pid
和 此结构的si_uid
字段可用于获取PID和 发送信号的进程的真实用户ID。...