Linux信号掩码 - 他们的意思是什么?

use*_*469 2 linux signals

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

SigPnd: 0000000000000000
ShdPnd: 0000000000004000
SigBlk: 0000010000017003
SigIgn: 0000000000381000
Run Code Online (Sandbox Code Playgroud)

例如,我如何解释SigIgn?我阅读了proc文档,但我不知道如何解释实际位的含义.

Duc*_*uck 5

不知道你从哪里获得"16位掩码内的32个信号"信息,但据我所知它是错误的.

假设每行是十六进制,则每行是8字节或64位.低4字节(32位)是标准信号.高32位是posix实时信号.(它实际上比那更复杂 - 看到man(7)信号和SIGRTMAX和SIGRTMIN为低位.)

因此,在SigIgn掩码中,您询问所有内容是否已关闭,但在较低的3个字节中有几个:38 10 00.在最低位字节00中,不会忽略任何信号.在下一个字节中,十六进制10以二进制形式转换为00010000.因此该字节中的第5位开启.同样,hex 38转换为二进制00111000.将3个字节放在一起作为二进制字符串我们得到:

001110000001000000000000
Run Code Online (Sandbox Code Playgroud)

因此,从右边开始计算,我们可以看到位13 20 21 22是ON,因此被忽略.如果你回到man(7)信号,你可以看到表格中的信号值.这些值按体系结构进行细分,因此,假设您使用的是ix86计算机,则信号值表示SIGPIPE,SIGTSTP,SIGTTIN和SIGTTOU信号被忽略.