在Linux中,msgsnd可以从用户空间发送消息。但是如果发送的消息数达到最大消息数,msgsnd就会阻塞,有没有办法改变最大值呢?谢谢
答案1
在 Linux 上,IPC 队列容量仅由队列大小(以字节为单位)决定;没有以消息数量表示的单独容量。队列容量已使用有两种方式:
如果满足以下任一条件,则消息队列被视为已满:
向队列添加新消息将导致队列中的总字节数超过队列的最大大小(字段
msg_qbytes
)。向队列添加另一条消息将导致队列中的消息总数超过队列的最大大小(字段
msg_qbytes
)。此检查对于防止将无限数量的零长度消息放入队列中是必要的。尽管此类消息不包含数据,但它们仍然消耗(锁定)内核内存。
要增加msg_qbytes
,您可以使用msgctl
,来自特权进程 ( CAP_SYS_RESOURCE
)。可以使用以下命令查看和设置初始 IPC 命名空间的最大值/proc/sys/kernel/msgmnb
。