最近、 msggetについてそのような質問に出くわしました。
while(1)
{
msqid = msgget(IPC_PRIVATE,IPC_CREAT);
if(msqid<0)
break;
printf("msqid=%d\n",msqid);
}
したがって、カーネル内のすべてのmsqidを消費します。
msggetはカーネルに永続的であるため、次回、プロセスは実行され、ENOSPCですぐに終了します。
問題をコンパスするようにsysconfを構成しますが。しかし、悪意のあるコードが実行され続ける場合は、何度も再構成する必要があります。
私の意見では、これは深刻な種類のリークであり、他のプロセスにmsqidが不足しているようにします。
システム管理者はこれをどのように回避できますか?