c - msgget可以恶意吗?

我最近遇到了这样一个关于格特的问题。

while(1)
{
     msqid = msgget(IPC_PRIVATE,IPC_CREAT);
     if(msqid<0)
           break;
     printf("msqid=%d\n",msqid);
}

很快,它就会消耗内核中的所有msqid。
由于msgget是内核持久性的,下次,进程将立即运行并退出enospc。
尽管配置了sysconf来解决这个问题。但如果恶意代码继续运行,我应该一次又一次地重新配置。
在我看来,这是一种严重的泄漏,并使其他过程缺乏msqid。
系统管理员如何避免这种情况?

最佳答案

所有sysv ipc接口(共享内存、信号量等)都有同样的问题,其中最糟糕的问题是由于设计不好而导致的性能糟糕,每个操作都需要调用kernelspace。如果可以,请放弃这些接口并使用等效的posix替换(mq_*用于消息队列)。

本文翻译自 https://stackoverflow.com/questions/4285075/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c linux msg


相关文章:

linux - 使用cron作业删除日志文件

java - 如何获取.MSG文件的MIME类型?

java - 从* .msg-File [Java]接收带有POI的电子邮件地址而不是名称

c - 虽然我使用C中的fread无法读取的二进制文件

c - 在32位系统上寻找非常大的文件[重复]

linux - awk模式可以匹配多行吗?

linux - sched_class结构中.next字段的用途是什么?

css - 在Mac和Windows上,“。msg”字体颜色不同

c - 为什么我的新阵列只复制和反转有关旧阵列的前10个元素?

c - FIFO流水线服务器仅接收一定数量