4

如何在 16 位掩码中存储 32 个信号?

SigPnd: 0000000000000000
ShdPnd: 0000000000004000
SigBlk: 0000010000017003
SigIgn: 0000000000381000

例如,我如何解释 SigIgn?我阅读了 proc 文档,但我不明白如何解释实际位的含义。

4

1 回答 1

8

不确定您从哪里获得“16 位掩码内的 32 个信号”信息,但据我所知这是错误的。

假设每行是十六进制,那么每行是 8 字节或 64 位。低 4 字节(32 位)是标准信号。高 32 位是 posix 实时信号。(实际上比这更令人费解 - 请参阅man (7) 信号以及 SIGRTMAX 和 SIGRTMIN 了解低位。)

因此,在您询问的 SigIgn 掩码中,所有内容都已关闭,但在低 3 个字节中有几件事:38 10 00。在最低位字节 00 中,没有信号被忽略。在下一个字节中,十六进制 10 转换为二进制的 00010000。所以那个字节中的第 5 位是打开的。同样,十六进制 38 转换为二进制 00111000。将 3 个字节放在一起作为二进制字符串,我们得到:

001110000001000000000000

所以从右边数我们可以看到位 13 20 21 22 为 ON,因此被忽略。如果你回到man (7) 信号,你可以看到信号值的表格。这些值按体系结构细分,因此,假设您在 ix86 机器上,信号值表示 SIGPIPE、SIGTSTP、SIGTTIN 和 SIGTTOU 信号被忽略。

于 2013-07-11T02:11:51.687 回答