Domanda

ho incontrato con una tale domanda su msgget di recente.

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

soonly, consuma tutto il msqid nel kernel.

Perché il msgget è kernel-persistente, la prossima volta, la corsa di processo e uscire con ENOSPC immdiately.

Anche se la configurazione del sysconf a Compass il problema. ma dovrei riconfigurare ancora e ancora se il codice maligno continua a funzionare.

E 'un grave tipo di perdite, le mie opinioni, e fare altro processo sia in mancanza di msqid.

Come sistema administror per evitare questo?

È stato utile?

Soluzione

Tutte le interfacce SysV IPC (memoria condivisa, semafori, ecc) hanno lo stesso problema, tra i molti altri problemi, la peggiore delle quali è la prestazione atroce a causa di cattiva progettazione in cui ogni operazione richiede una chiamata in kernelspace. Se è possibile, abbandonare queste interfacce e utilizzare le sostituzioni POSIX equivalenti (mq_* per code di messaggi).

Altri suggerimenti

Usa superiore e strace per trovare il processo che continua a creare le code di messaggi e uccidere quel processo. (Ciò presuppone Linux; altri Unix hanno strumenti equivalenti)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top